Dies kann eine sehr dumme Frage erscheinen, aber ich begegnete etwas Geheimnisvolles und scheinbar schön heute. Ich habe versucht herum zu googlen und konnte nichts graben.Genaue Darstellung unrepresentable Gleitkommazahlen in Java
Ich bin mir bewusst, dass 0,1 nicht im Binärformat dargestellt werden kann. Und doch, wenn ich den folgenden Code ausführen:
double g = 1.0;
System.out.println(g);
g = g/10;
System.out.println(g);
g = g*3;
System.out.println(g);
Dies erzeugt die Ausgabe:
1.0
0.1
0.30000000000000004
Die erste Ausgabe und die dritte Ausgabe erwartet, aber was mit dem zweiten ist da los? Warum ist es, nun, richtig? Das sollte unmöglich sein, und doch, da ist es.
Können Sie bitte die Ausgänge sind Sie gesehen haben, so dass wir, um Ihren Code nicht zu kompilieren und wieder laufen? – Nayuki
Der Ausgang ist er immer ist wahrscheinlich: '1.0',' 0.1', '0.30000000000000004' – Addison
Anzeige genügend Ziffern rechts vom Komma, und Sie werden den Unterschied sehen. Bitte lesen Sie [Was jeder Informatiker über Fließkomma-Arithmetik wissen sollte] (https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html). –