Il cast sulle variabili intere

Se proviamo a effettuare la divisione tra due varibili di tipo int spesso sorge un “problema”, ovvero che nonostante il nostro tentativo di salvare il risultato in una variabile di tipo float, venga memorizzata solo la parte intera della divisione!

Se proviamo ad eseguire il seguente codice

#include <iostream>
using namespace std;
int main(){   
 int x=3; //dividendo   
 int y=2; //divisore   
 float r=x/y; //r risultato della divisione   
 cout<<r; 
}

il risultato che ci verrà stampato sullo schermo sarà “1”.

Ciò avviene perché la divisione tra int è la divisione intera che restituisce un numero int e non un float.

Affinché il risultato della divisione sia con la virgola è necessario operare quello che in gergo tenico si chiama cast, ovvero chiedere al compilatore di convertire il contenuto di una variabile a un altro tipo.

#include <iostream>
using namespace std;

int main()
{
 int x=3;
 int y=2;
 float r=float(x)/y; //casting sul dividendo
 cout<<r;
}

In questo caso il codice stampa “1.5”.

Qui sopra c’è l’esempio precedente in cui al dividendo viene fatto il cast al tipo float, la divisione quindi sarà tra un float e un int, in questo caso in C++ la divisione tra float e int restituisce un float con il risultato della divisione anche con la parte decimale.

Per completezza si specifica che nell’esempio si sarebbe potuto fare anche solo il casting al divisore, o a entrambi (dividendo e divisore).
Se invece avessimo fatto il casting al risultato della divisione tra int, ovvero se avessimo scritto float(x/y) il codice dell’esempio avrebbe stampato nuovamente “1”.

 

 

Annunci