除以浮点数1000时丢失的数据

时间:2013-08-07 04:10:21

标签: java

我hava float

float data = 24931192;

当我除以1000时

data = data / 1000;

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

4 个答案:

答案 0 :(得分:5)

浮点数/浮点数只有很高的精度(准确地说是Java的23位精度),而你刚刚遇到精度不够的问题。如果浮点数不够,尝试使用双打,尽管最终会遇到问题。

答案 1 :(得分: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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

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