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

运行

2.0
2.6
false

您得到false是因为您正在检查两个double是否相等。理论上,这两个值应该相等。然而,0.1double表示是不精确的,因此将其与2.0相加六次不会导致2.6的值。有一个小的差异,这会导致你的比较失败。

将最后一行更改为:

System.out.println ( Math.abs(a-b) ) ;

看看误差的大小有多小(大约是4.44*10-16(demo))。

如果要对Java的十进制值执行精确运算,请使用BigDecimal类型而不是`double。

最新更新