01. Conversione al tipo float

Quando si effettua un'operazione di somma, sottrazione, moltiplicazione o divisione tra numeri interi il risultato è ancora un numero intero.

E' già stato enfatizzato, ad esempio, che la divisione 5/2 da come risultato 2 perché opera tra numeri interi.

I numeri con una parte decimale corrispondono in C al tipo float e si rappresentano utilizzando come separatore il punto, come ad esempio 2.5.

Perché un numero senza parte decimale sia interpretato dal compilatore C come numero decimale (cioè di tipo float) occorre utilizzare l'operatore di conversione di tipo (operatore di cast): ad esempio (float)5 è interpretato come un numero di tipo float.

L'operatore di cast può essere utilizzato anche per richiedere di interpretare una variabile di tipo intero come se fosse di tipo float.

Ad esempio:

  • f = (float)i;

Quando si effettua una delle quattro operazioni tra numeri o variabili di tipo differente (int e float) il risultato è di tipo float.

Esempi:

  • f = (float)i/2;

  • f = 5.0/2;

Esempio:


#include <stdio.h>

int main()

{

int a[100], i, j, somma;

float media, calcolo;

printf("Inserire una serie di numeri naturali (terminare con -1): ");

for(i=0; i<100; i++){

scanf("%d", &a[i]);

if (a[i]==-1)

break;

}

for(somma=0, j=0; j<i; j++){

somma+=a[j];

}

media=somma/i; // la divisione tra interi restituisce un intero

printf("Media (divisione tra INTERI): %.2f\n", media);

media=(float)somma/i; // la divisione tra un float e un intero restituisce un float

printf("Media (divisione tra FLOAT e INTERO): %.2f\n", media);

printf("\n\nOPERAZIONI CON VALORI NUMERICI COSTANTI\n");

calcolo=5/2; // 5 e 2 sono numeri INTERI

printf("Calcolo (divisione tra INTERI 5/2): %.2f\n", calcolo);

calcolo=5.0/2.0; // 5.0 e 2.0 sono numeri decimali (float)

printf("Calcolo (divisione tra FLOAT 5.0/2.0): %.2f\n", calcolo);

calcolo=(float)5/2; // (float)5 e' un numero decimale (float)

// 2 e' un numero INTERO

printf("Calcolo (divisione tra FLOAT e INTERO (float)5/2): %.2f\n", calcolo);

calcolo=5/(float)2; // (float)5 e' un numero decimale (float)

// 2 e' un numero INTERO

printf("Calcolo (divisione tra INTERO e FLOAT 5/(float)2): %.2f\n", calcolo);

calcolo=5+0.2;

printf("Calcolo (somma tra INTERO e FLOAT 5+0.2): %.2f\n", calcolo);

return 0;

}

media=somma/i;

La precedente divisione coinvolge due variabili di tipo intero quindi il risultato è ancora un numero intero (cioè senza una parte decimale).

Poiché il risultato deve essere memorizzato in una variabile di tipo float, esso viene convertito in numero di tipo float, con una parte decimale posta a zero.

media=(float)somma/i;

La precedente divisione coinvolge due variabili di tipo intero. La variabile somma è però convertita in una variabile di tipo float tramite l'operatore di cast.

Il risultato in questo caso è di tipo float e quindi comprensivo di una parte decimale significativa.

Esso è memorizzato in una variabile dello stesso tipo e quindi non richiede conversione.

calcolo=5/2;

La precedente divisione coinvolge due numeri di tipo intero quindi il risultato è ancora un numero intero (cioè senza una parte decimale).

calcolo=5.0/2.0;

La precedente divisione coinvolge due numeri di tipo float e quindi il risultato è ancora un numero di tipo float.

calcolo=(float)5/2;

La precedente divisione coinvolge due numeri di tipo intero. Il numero 5 è però convertito in un numero di tipo float tramite l'operatore di cast (float).

Il risultato, poiché l'operazione coinvolge un numero di tipo float (anche se convertito tramite l'operatore di cast), è ancora un numero di tipo float.