View Full Version : [C] Divisione semplicissima.
cataleen
03-04-2007, 21:27
Ragazzi ma 10 / 7 e' 1.428571429, vero?
In C ho fatto questo programma
#include <stdio.h>
int main() {
float _number;
_number = 10 / 7;
printf("%f\n", _number);
}
Come mai mi da 1.000000 come risultato? L'IDE mi da anche questo messaggio "File.c:8: Warning: control reaches end of non-void function.". Grazie.
mapomapo
03-04-2007, 21:34
x.xxxxxx
è la formattazione %f
in pratica se tu chiami la funzione
printf("%f", variabile_float);
ti verrà sempre stampato a schermo un numero seguito da 6 cifre decimali
Vito
EDIT:
ops avevo letto male...prova a fare innanzitutto
float number;
poi metti le parentesi
number=(10/7);
e vedi che succede...scusami avevo male interpretato il quesito per questo all'inizio la risposta è diversa...
P P S
ho provato a compilare e mi dà lo stesso errore...ho provato a fare il cast esplicito a float e niente....
se però inserisco 10 e 7 in due variabili float distinte allora il tutto funziona :o
Ragazzi ma 10 / 7 e' 1.428571429, vero?
In C ho fatto questo programma
#include <stdio.h>
int main() {
float _number;
_number = 10 / 7;
printf("%f\n", _number);
}
Come mai mi da 1.000000 come risultato? L'IDE mi da anche questo messaggio "File.c:8: Warning: control reaches end of non-void function.". Grazie.
prova con:
_number = 10.0 / 7.0;
esatto..mettendo le parentesi e basta non ho ben capito cosa sarebbe dovuto cambiare :D
cmq il modo più elegante e più portabile tra i vari compilatori secondo me è fare il casting esplicito degli interi a float:
_number = (float)10/(float)7
P P S
ho provato a compilare e mi dà lo stesso errore...ho provato a fare il cast esplicito a float e niente....
se però inserisco 10 e 7 in due variabili float distinte allora il tutto funziona :o
impossibile che non funzioni il casting esplicito..forse sbagli a farlo:)
mapomapo
03-04-2007, 21:51
impossibile che non funzioni il casting esplicito..forse sbagli a farlo:)
sì nella fretta non avevo fatto altro che castare a float l'espressione ovvero
(float)(10/7)....ma ovviamente restituisce 1.000000 :D
VIto
float _number;
_number = 10 / 7;
Ma i due operandi sono interi, pertanto è una divisione intera, non floating-point.
_number = 10.0f / 7;
oppure
_number = (float) 10 / 7;
In entrambi i casi il primo operando diventa float (quindi pure l'altro viene portato a float per eseguire la divisione).
cataleen
03-04-2007, 22:18
grazie a tutti. mi viene piu facile fare 10.0 / 7. grazie. ciao.
attenzione però che il casting implicito non sarebbe una bella pratica, visto che è il compilatore e non l'utente che decide se castare l'altro int a float o viceversa introducendo quindi potenziali rischi di portabilità del codice sorgente tra diversi compilatori o tra diverse versioni degli stessi..
Ziosilvio
03-04-2007, 23:46
Ragazzi ma 10 / 7 e' 1.428571429, vero?
In C ho fatto questo programma
#include <stdio.h>
int main() {
float _number;
_number = 10 / 7;
printf("%f\n", _number);
}
Come mai mi da 1.000000 come risultato?
Alla riga 5, l'operando destro dell'assegnazione è un'espressione costituita da due costanti di tipo int e dall'operatore di divisione.
Tale espressione ha tipo int, e valore 1, perché il quoziente della divisione di 10 per 7 è 1.
Essendo l'operando sinistro di tipo float, il valore int 1 viene convertito nel valore float 1.0.
L'IDE mi da anche questo messaggio "File.c:8: Warning: control reaches end of non-void function.". Grazie.
Non hai messo un valore di ritorno a main, che è giustamente di tipo int.
Usa il valore 0 per indicare la terminazione corretta.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.