Java中的浮点奇怪现象
Possible Duplicate:
Strange floating-point behaviour in a Java program
我在Java中遇到了这种奇怪的现象。在Java程序中尝试以下语句:
System.out.print(4.0-3.1);
输出将是0.8999999
为什么会这样?怎样才能改变呢
你可以在下面搜索框中键入要查询的问题!
Possible Duplicate:
Strange floating-point behaviour in a Java program
我在Java中遇到了这种奇怪的现象。在Java程序中尝试以下语句:
System.out.print(4.0-3.1);
输出将是0.8999999
为什么会这样?怎样才能改变呢
# 1 楼答案
你会找到你的答案
TL;DR summary:你必须学习浮点在计算中是如何表示的,这样你才能知道为什么会发生这些事情。这是浮点表示的产物,如果这种结果不可接受,可以通过不使用浮点类型来修改它
# 2 楼答案
浮点不能精确地表示值0.1或0.1的任意倍数。它以2为基数,显示它的数字系统以10为基数。以base 2格式存储base 10数据时会丢失一些数据
# 3 楼答案
你玩得很开心。但是是二进制的。十进制中有周期数。比如1/3,也就是1.33333,以此类推。十进制中的一些数字不是周期性的,但在二进制中是周期性的
因此,当存在周期数的可能性时,计算总是不准确的
# 4 楼答案
我建议读What Every Scientist Should Know About Floating-Point Arithmetic。这是浮点数学的标准行为。大多数系统(包括Java)使用IEEE 754作为浮点数的标准表示形式。这个标准并不总是完美地表示精确的数值,所以您在打印时经常会看到轻微的数值不一致,正如您在这里发现的
# 5 楼答案
这是一个典型的浮点结果
从
Float
和Double
得到的结果不同:输出:
这是因为
0.1
不能在基2中均匀地表示,并导致精度损失。例如:应该都返回
0.1
,但实际上会输出: