java中的未知循环结果
我想问,因为这个周期把我抛到了错误的境地,我不知道为什么会有这样的结果。 我认为这与浮点有关 谢谢你的帮助java中的未知循环结果,java,Java,我想问,因为这个周期把我抛到了错误的境地,我不知道为什么会有这样的结果。 我认为这与浮点有关 谢谢你的帮助 double a = 2d; System.out.println(a); double b = 2.6d ; System.out.println(b); for (int i = 0; i < 6 ; i ++) { a+= 0.1; } System.out.println ( a==b ) ; 您将得到false,因为您正在检查两个doubles是否相等。理论
double a = 2d;
System.out.println(a);
double b = 2.6d ;
System.out.println(b);
for (int i = 0; i < 6 ; i ++)
{
a+= 0.1;
}
System.out.println ( a==b ) ;
您将得到
false
,因为您正在检查两个double
s是否相等。理论上,这两个值应该相等。但是,0.1
的double
表示是不精确的,因此将其添加到2.0
中六次并不能精确得到2.6
的值。有一个小的差异,这导致你的比较失败
将最后一行更改为:
System.out.println ( Math.abs(a-b) ) ;
看看误差的大小有多小(大约是4.44*10-16)
如果要对十进制值执行精确的Java操作,请使用type而不是'double.使用IDE的调试器查看到底发生了什么。你会注意到精度的缺乏是如何逐渐显现出来的。我测试了您的特定代码,以查看
a
的值按如下方式上升:2.0,2.1,2.2,2.30000000000000003,…非常感谢您,但是因为0.1在double
中是不精确的?@ChristianEscobarF 0.1不能表示为2()的负幂的有限和。
System.out.println ( Math.abs(a-b) ) ;