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.
Sito: 7ecnologie
Sezione: 08. C language
Capitolo: 02. Introduzione al C
Paragrafo: 11. Variabili di tipo float
Approfondimento: 01. Conversione al tipo float
Indice dei capitoli: 00. Risorse - 01 Ambiente di sviluppo - 02. Introduzione al C - 03. Le librerie - 04. Tutorial - 05. Esercizi svolti - 98. Esercizi
Indice dei paragrafi: 01. Hello World - 02. Variabile di tipo int - 03. Input da tastiera - 04. Controllo condizionale if - 05. Operatori logici - 06. Ciclo while - 07. Operatore modulo - 08. Array - 09. Ciclo for - 10. Ciclo do/while - 11. Variabili di tipo float - 12. Funzione random() - 13. Impostazione del set di caratteri - 14. Definizione di funzioni - 15. Passaggio di parametri: gli array - 16. Variabili: visibilità e durata - 17. Il tipo char - 18. I file - 19. Funzioni matematiche
Indice degli approfondimenti: 01. Conversione al tipo float