Eventuali duplicati:
Varying behavior for possible loss of precisionJava interrompe la digitazione! Chi può spiegarlo?
ho trovato un'inconsistenza in Java forte controllo di battitura al momento della compilazione. Si prega di guardare il seguente codice:
int sum = 0;
sum = 1; //is is OK
sum = 0.56786; //compile error because of precision loss, and strong typing
sum = sum + 2; //it is OK
sum += 2; //it is OK
sum = sum + 0.56787; //compile error again because of automatic conversion into double, and possible precision loss
sum += 0.56787; //this line is does the same thing as the previous line, but it does not give us a compile error, and javac does not complain about precision loss etc.
Qualcuno può spiegare a me? È un bug noto o un comportamento desiderato? C++ dà un avvertimento, C# dà un errore di compilazione.
Java interrompe la digitazione? Puoi sostituire + = con - = o * = - tutto è accettabile da un compilatore.
strana è che si memorizzano galleggiante variabile int –
@ KarelFrajtak Un numero decimale senza un modificatore (come 'd' o' f') è un doppio, non un float. Inoltre, penso che potresti perdere il punto .. – nfechner
Java ha chiaramente fatto un errore qui. Dovevano essere più precisi quando è permesso il cast silenzioso. E la ragione per le radici gettate in un'altra cattiva decisione. La specifica sulle operazioni di tipo intero è un pasticcio puzzolente. – irreputable