小编典典

Java中的双重算术和相等性

java

这很奇怪(至少对我来说)。此例程显示为true:

double x = 11.0;
double y = 10.0;
if (x-y == 1.0) {
    // print true
} else {
    // print false
}

但是,此例程显示false:

double x = 1.1;
double y = 1.0;
if (x-y == 0.1) {
    // print true
} else {
    // print false
}

有人在乎解释这里发生了什么吗?我猜想它与ints构成floats的整数运算有关。另外,还有其他10具有此属性的基准(除外)?


阅读 222

收藏
2020-09-28

共1个答案

小编典典

1.0具有精确的二进制表示形式。0.1不。

也许您是在问为什么0.1不以1的尾数和-10的指数存储?但这不是它的工作原理。它不是十进制数字加指数,而是二进制数字。因此“乘以10”不是自然的事情。

抱歉,也许最后一部分不清楚。最好将指数视为位移。位的移位不会将像0.1(十进制)这样的无限序列转换为有限序列。

2020-09-28