所以我有这段代码:
int x = 435;
int y = x / 2 * 5;
如果我手动计算y,我会得到1087.5的结果。但是当我打印整数y时,我得到结果1085.为什么这样?不应该是1088还是1087?
答案 0 :(得分:4)
这是因为整数算术:
int/int = int
所以,435/2
将是
435/2 = 217
并且
217*5 = 1085
你能做什么?根据需要投射数值:
int y = (int)((float)x / 2 * 5);
或者如果您想要真实的结果,请将变量y
声明为float
:
float y = (float)x / 2 * 5;
答案 1 :(得分:2)
这将每个部分的结果保存为int
所以
435 / 2 == 217
217 * 5 == 1085
答案 2 :(得分:0)
int
值x/2=217
和217 * 5 == 1085
是
您要将int
值x
分开,因此结果为int
值(int/int=int)
x/2=217
然后
217*5=1085
答案 3 :(得分:0)
试试这个:
int x = 435;
double y = ((double) x / 2) * 5;
y
不能是int(否则你将失去精度)。此外,x / 2
会产生integer
值,因此您需要将其投放到double
或float
答案 4 :(得分:0)
Java正在使用整数数学,这是
int x = 435;
int y = x / 2 * 5;
相当于
int x = 435;
int y = x / 2; // <-- 217
y *= 5; // <-- 1085
如果你想绕过另一个方向尝试,
int x = 435;
int y = (int) Math.round(((double) x / 2) * 5); // <-- 1088
答案 5 :(得分:0)
当你将435除以2时。 它存储217而不是217.5,因此在乘以217 * 5 = 1085
之后您正在尝试将浮点值存储到INT中,从而获得截断值。
此外,没有括号,编译器将根据运营商的优先级逐个从LHS到RHS执行。
您的代码
int x = 435; int y = x / 2 * 5;
实际上正在执行以下操作。
使用int将217.5截断为217,因此你得到了答案。 使用double或float来存储你想要的答案
int x = 435; double y = y =(x / 2)* 5
这将为您提供所需的答案。
答案 6 :(得分:0)
答案是正确的 - : 435/2 = 217.5,因为声明为int,它将四舍五入为217 217 * 5 = 1085 这是必要的答案。