Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - arrotondamento
Forum - C/C++ - arrotondamento

Avatar
Damiano (Normal User)
Newbie


Messaggi: 1
Iscritto: 29/05/2005

Segnala al moderatore
Postato alle 22:14
Domenica, 29/05/2005
Qualcuno mi sa spiegare questa anomalia in C?
int a=5, b=2; float x=a/b;
printf("%f",x);
Il valore visualizzato ? 2 !! Perch? non 2,5 ?

PM Quote
Avatar
Zizzius (Honoris User)
Guru


Messaggi: 675
Iscritto: 28/02/2005

Segnala al moderatore
Postato alle 0:18
Lunedì, 30/05/2005
L'operatore di assegnamento (=) va da destra a sinistra, vale a dire valuta prima ci? che c'? a destra e il risultato lo assegna alla variabile di sinistra.
Valutiamo dunque ci? che c'? a destra: si tratta di una divisione tra interi e come tale produce un risultato intero; questo risultato intero viene quindi assegnato alla variabile di sinistra (a qualunque tipo appartenga).

Come risolvere dunque il tuo problema? (non ? un'anomalia!)
Il C fornisce il cosidetto operatore di conversione. Vediamo la sintassi, rifacendoci al tuo esempio:
float x = (float) a / b;
in questo modo, il compilatore effettuer? una temporanea conversione del valore di a, che da 5 viene trasformato in 5.0, o per meglio dire, da integer viene trasformato in float.
Ora, la divisione 5.0 / 2 non ? pi? una divisiona tra interi, pertanto produce un risultato di tipo float, che viene immagazzinato in x.

Ultima modifica effettuata da Zizzius il 30/05/2005 alle 0:22
PM Quote