gpt4 book ai didi

java - 为什么 java += 得到错误的结果,我该如何防止呢?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:41:31 25 4
gpt4 key购买 nike

为什么 java += 得到错误的结果,我该如何防止这个问题? (例如,在 IDE 中以任何方式显示 warning?)

我试过 eclipse 和 IntelliJ,但都没有显示任何警告。

示例代码:

    {
long a = 20000000000000000L;
double b = 90.0;
a += b;
System.out.println(a); // 20000000000000088 NG
}

{
long a = 10000000000000000L;
double b = 90.0;
a += b;
System.out.println(a); // 10000000000000090 OK
}

{
long a = 20000000000000000L;
double b = 90.0;
a += (long) b;
System.out.println(a); // 20000000000000090 OK
}

最佳答案

根据 JLS,这 compound assignment expression

a += b;

相当于

a = (long) (a + b);

由于 b 是一个 doublebinary numeric promotion发生在加法发生之前。两个操作数都被转换为 double 值,并且加法发生在浮点运算中。

20000000000000090 不能完全表示为 double,因此您失去了精度,取而代之的是 20000000000000088。然后它被转换回一个 long,它有足够的精度来表示 20000000000000088

您的第二个代码段生成 10000000000000090,它可以完全表示为 double

你的第三个片段相当于

a = (long) (a + (long) b);

它使用 integer arithmetic . 20000000000000090 可以表示为 long

我不知道有什么工具可以就此向您发出警告。

相关:

关于java - 为什么 java += 得到错误的结果,我该如何防止呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37581809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com