我是一名自学成才的初学者,在使用相同的等式时无法理解整数和双精度
例如,
int x;
double x;
i = 5;
x = i / 2 + 1.0; // (answer 3.0)
z = (int) 1.0 + i / 2.0; // (answer 3.5)
四舍五入是什么?
答案 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。