整数打印出的值与实际值不同?

时间:2014-07-16 05:57:23

标签: java

所以我有这段代码:

int x = 435;
int y = x / 2 * 5;

如果我手动计算y,我会得到1087.5的结果。但是当我打印整数y时,我得到结果1085.为什么这样?不应该是1088还是1087?

7 个答案:

答案 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)

intx/2=217217 * 5 == 1085

的原因

您要将intx分开,因此结果为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值,因此您需要将其投放到doublefloat

答案 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;

实际上正在执行以下操作。

  1. 分配x = 435;
  2. 除以y = x / 2; //这个存储y = 217
  3. 然后它乘以y = y * 5; //最后y = 1085
  4. 使用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 这是必要的答案。