Ich habe den folgenden Code:Debugger Runden float Zahlen ... Warum passiert das und wie man es umgehen?
public static float FLOAT_VALUE = 0.899999761581421f;
Aber immer, wenn ich diesen Wert mit dem Debugger aufrufen, sehe ich, dass es jetzt 0.9f geworden ist. Warum passiert das und wie komme ich damit klar?
https://stackoverflow.com/questions/588004/is-floating-point-math-broken – epascarello
'float' hat [6 bis 9 signifikanten Dezimalstellen Präzision] (https://en.wikipedia.org/wiki/Single-precision_floating-point_format#IEEE_754_single-precision_binary_floating-point_format:_binary32). Sie geben 15 Genauigkeitsziffern an. 'float' kann das nicht speichern, aber' double' kann, da es [15 bis 17 signifikante Dezimalstellen Genauigkeit hat] (https://en.wikipedia.org/wiki/Double-precision_floating-point_format#IEEE_754_double-precision_binary_floating- point_format: _binary64). – Andreas
Der Debugger rundet auf weniger Ziffern als es sollte. Der nächste Float zu 0.899999761581421 ist 0.89999973773956298828125. Der nächstliegende Wert von 0,9 ist 0.99999997615814208984375. Sie sind anders. Die toString Konvertierung Ihres Floats ist 0.89999974, nicht 0.9 –