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

运行

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”。

关于java - java中的未知循环结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26081257/

相关文章:

java - Java 虚拟机规范的当前版本在哪里?

java - 尝试在 IntelliJ 上构建 gradle 项目时出现错误代码 B0

java - findInLine 错误仅搜索第一行

java - 在 Android 布局 XML 中将 TextView 放置在 EditText 元素之前会导致 EditText 不显示

java - 从资源加载时 GSON 出现 EOF 错误

java - 如何通过 jtextfield 迭代和打印矩阵?

java - Sonar 问题 : Classes and methods that rely on the default system encoding should not be used

java - 对于已经泛型的类,使类型参数递归是否合法?

java - 跳过窗口被捕获

java - 如何比较 if 语句中以逗号分隔的多个单词?