Floating point Weird Phenomenon in Java
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Strange floating-point behaviour in a Java program
号
我在Java中遇到了这个奇怪的现象。在Java程序中尝试这个语句:
1 |
输出为
为什么会这样?怎样才能改变呢?
我建议每个科学家阅读关于浮点运算的知识。这是浮点数学的标准行为。大多数系统(包括Java)使用IEEE 754作为浮点数字的标准表示。确切地说,本标准并不总是完美地表示数值,因此您在打印时经常会看到轻微的数值不一致,如您在此处发现的。
这是一个典型的浮点结果runded。
从
输出:
1 2 | 0.9000001 0.8999999999999999 |
号
这是因为
如果两者都返回
1 2 | 0.100000024 0.10000000000000009 |
。
浮点不能精确表示0.1或0.1的任何倍数。它以2为基数,其中显示的数字系统以10为基数。以Base 2格式存储Base 10数据时,会丢失一些数据。
你在玩浮球。但是是二进制的。在十进制中有周期数。如1/3,即1.33333等。十进制系统中的一些数字不是周期性的,但在二进制系统中是周期性的。
因此,当存在周期数的可能性时,计算总是不准确的。
你可以在这个链接后面找到你的答案。
TL;Dr Summary:您必须了解浮点在计算中是如何表示的,这样您就知道为什么会发生这些事情。这是一个浮点表示的工件,如果您不能接受这种结果,那么您可以通过不使用浮点类型来更改它。