解释双值的“累积舍入误差”

时间:2013-10-21 19:34:26

标签: java int double

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

例如,

int x;
double x;
i = 5;

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

z = (int) 1.0 + i / 2.0; // (answer 3.5)

四舍五入是什么?

4 个答案:

答案 0 :(得分:6)

问题在于此操作:

i / 2

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

5 / 2.0

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

((double) i) / 2

答案 1 :(得分:0)

涉及两个整数的除法将产生一个int(因此,5/2 = 2)。如果在其中一个操作数中使用double,它将产生一个double(因此5 / 2.0 = 2.5)。其余的是操作优先。

答案 2 :(得分:0)

i / 2 = int 2因为两个操作数都是整数,因此使用整数除法运算(产生整数结果)

i / 2.0 = double 2.5因为我第一次被强制加倍(另一个操作数的类型)并且使用了双重划分

答案 3 :(得分:0)

这是整数和小数除法之间的一种情况。

当两个整数被分割时,执行整数除法,即数字被分割并且十进制分量被截断。

当有问题的两个数字中的任何数字是十进制(双/浮点数)时,每个其他数字被视为小数,这样给定表达式5 / 2.0。无论对象2.0是什么类型(默认为double),结果都将返回2.5。

给定混合等式,如5/2 + 1.0,运算符优先级定义应如何计算表达式。由于除法的优先级高于加法,因此5/2被评估为整数除法,将2作为整数返回。

然后将其添加到1.0,其中2在评估之前被提升为double,返回数字3.0作为最终结果的double。