我有漂浮
float data = 24931192;
当我除以 1000
data = data / 1000;
它为我返回 24931.191。谁能告诉我为什么?我该如何预防?谢谢
我有漂浮
float data = 24931192;
当我除以 1000
data = data / 1000;
它为我返回 24931.191。谁能告诉我为什么?我该如何预防?谢谢
浮点数/浮点数只有这么高的精度(准确地说,Java 中的精度为 23 位),而您只是遇到了一个精度不够的问题。如果浮点数不够,请尝试使用双精度数,尽管最终也会遇到问题。
浮点数的精度有限。在这里您可以阅读更多关于如何对浮点数进行编码:http ://en.wikipedia.org/wiki/IEEE_floating-point_standard
如果您关心精度,您应该使用 BigDecimal:http ://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigDecimal.html
浮点数据类型没有无限精度,所以你会看到像这样的小怪癖。一种选择(如果您真的想要浮点结果)是以双精度执行操作,然后强制转换为浮点数。另一种选择是使用 BigDecimal 之类的东西而不是浮点数。
浮点值 (float
和double
) 是近似值。您可能会看到舍入错误,实际上不可能准确地表示某些值。想一想1/3 = 0.333333...
:最终数字的存储槽用完了,你最终得到 `(1/3) * 3 = 0.999999..."
大多数用途不需要足够精确的答案来需要超过double
. 如果这样做,请查看BigDecimal
,这要慢得多。