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) ) ;