我hava float
float data = 24931192;
当我除以1000时
data = data / 1000;
它为我返回24931.191。谁能告诉我为什么?我该如何预防呢? 谢谢
答案 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)
浮点值(float
和double
)是近似值。您可能会看到舍入错误,实际上无法准确表示某些值。想想1/3 = 0.333333...
:最终数字的存储槽耗尽,你最终得到`(1/3)* 3 = 0.999999 ......“
大多数用途不需要足够精确的答案,需要的时间超过double
。如果你这样做,请查看BigDecimal
,这要慢得多。