不能使用Double.MAX_VALUE Java的减法运算符

Dao*_* Vi 3 java precision double

我正在尝试以下代码:

Double a = Double.MAX_VALUE - (1000000000 * 100000000 * 1000000);
System.out.println(a);
Run Code Online (Sandbox Code Playgroud)

但是,结果仍然是1.7976931348623157E308(最大值为Double)

有人可以向我解释一下吗?

Era*_*ran 5

1000000000 * 100000000 * 1000000 是3个整数的乘法,这会导致溢出.

即使您通过写作避免溢出:

Double a = Double.MAX_VALUE - (1000000000.0 * 100000000.0 * 1000000.0);
Run Code Online (Sandbox Code Playgroud)

你可能仍然没有看到差异,因为你减去的数字Double.MAX_VALUEDouble.MAX_VALUE(~1.797*10 ^ 308 相比,可以忽略不计),大约比你试图从它减去的数量级大275个数量级.