解释双值的"累积舍入误差"

use*_*894 2 java double int

我是一名自学成才的初学者,在使用同一个等式时难以理解整数和双精度数

例如,

int x;
double x;
i = 5;

x = i / 2 + 1.0; // (answer 3.0)

z = (int) 1.0 + i / 2.0; // (answer 3.5)
Run Code Online (Sandbox Code Playgroud)

四舍五入是什么?

Ósc*_*pez 6

问题是这个操作:

i / 2
Run Code Online (Sandbox Code Playgroud)

...正在执行整数除法.这就是为什么5 / 2作为结果给出2,不是2.5.这是Java中的常规行为,要执行浮点除法,必须确保至少有一个操作数是浮点字面值:

5 / 2.0
Run Code Online (Sandbox Code Playgroud)

现在上面将按2.5预期返回.或者,您可以转换其中一个操作数:

((double) i) / 2
Run Code Online (Sandbox Code Playgroud)