2

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

例如,

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

4 回答 4

6

问题是这个操作:

i / 2

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

5 / 2.0

现在上面将返回2.5,如预期的那样。或者,您可以强制转换任一操作数:

((double) i) / 2
于 2013-10-21T19:35:51.123 回答
0

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

i / 2.0 = double 2.5因为 i 首先被强制加倍(另一个操作数的类型)并且使用了双除法

于 2013-10-21T19:40:04.183 回答
0

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

当两个整数相除时,进行整数除法,即数字被除而小数部分被截断。

当所讨论的两个数字中的任何数字是小数(双精度/浮点数)时,每个其他数字都被视为小数,因此给定表达式 5 / 2.0。无论 2.0 是什么类型的对象(默认为双精度),结果都将返回 2.5。

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

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

于 2013-10-21T19:40:37.643 回答
0

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

于 2013-10-21T19:36:44.030 回答