4

我有漂浮

float data = 24931192;

当我除以 1000

data = data / 1000;

它为我返回 24931.191。谁能告诉我为什么?我该如何预防?谢谢

4

4 回答 4

5

浮点数/浮点数只有这么高的精度(准确地说,Java 中的精度为 23 位),而您只是遇到了一个精度不够的问题。如果浮点数不够,请尝试使用双精度数,尽管最终也会遇到问题。

于 2013-08-07T04:12:23.817 回答
3

浮点数的精度有限。在这里您可以阅读更多关于如何对浮点数进行编码:http ://en.wikipedia.org/wiki/IEEE_floating-point_standard

如果您关心精度,您应该使用 BigDecimal:http ://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigDecimal.html

于 2013-08-07T04:14:51.577 回答
1

浮点数据类型没有无限精度,所以你会看到像这样的小怪癖。一种选择(如果您真的想要浮点结果)是以双精度执行操作,然后强制转换为浮点数。另一种选择是使用 BigDecimal 之类的东西而不是浮点数。

于 2013-08-07T04:13:26.573 回答
1

浮点值 (floatdouble) 是近似值。您可能会看到舍入错误,实际上不可能准确地表示某些值。想一想1/3 = 0.333333...:最终数字的存储槽用完了,你最终得到 `(1/3) * 3 = 0.999999..."

大多数用途不需要足够精确的答案来需要超过double. 如果这样做,请查看BigDecimal,这要慢得多。

于 2013-08-07T04:13:27.550 回答