【发布时间】:2014-07-16 05:57:22
【问题描述】:
所以我有这个代码:
int x = 435;
int y = x / 2 * 5;
如果我手动计算 y,我得到的结果是 1087.5。但是当我打印出整数 y 时,我得到的结果是 1085。这是为什么呢?它不应该四舍五入到 1088 或 1087 吗?
【问题讨论】:
标签: java
所以我有这个代码:
int x = 435;
int y = x / 2 * 5;
如果我手动计算 y,我得到的结果是 1087.5。但是当我打印出整数 y 时,我得到的结果是 1085。这是为什么呢?它不应该四舍五入到 1088 或 1087 吗?
【问题讨论】:
标签: java
这是因为整数运算:
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;
【讨论】:
这会将每个部分的结果保存为 int
所以
435 / 2 == 217
217 * 5 == 1085
【讨论】:
x/2=217和217 * 5 == 1085的int值是原因
您正在划分int 值x 所以结果将是int 值(int/int=int)
x/2=217
然后
217*5=1085
【讨论】:
试试这个:
int x = 435;
double y = ((double) x / 2) * 5;
y 不能是 int (否则你会失去精度)。此外,x / 2 将为您生成一个 integer 值,因此您需要将其转换为 double 或 float
【讨论】:
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
【讨论】:
答案是正确的-: 435/2 = 217.5,因为声明为 int,四舍五入为 217 217*5 = 1085 这是必需的答案。
【讨论】:
当你将 435 除以 2 时。 它存储 217 而不是 217.5,因此在乘以 217*5= 1085
您正在尝试将浮点值存储到 INT 中,从而获得截断值。
另外,不带括号,编译器会根据运算符的优先级,从左到右依次开始执行。
你的代码
int x = 435; int y = x / 2 * 5;
实际上是在执行下面的操作。
使用 int 会将 217.5 截断为 217,因此您会得到该答案。 使用 double 或 float 存储您想要的答案类型
int x = 435; 双倍 y = y=(x/2)*5
这将为您提供所需的答案。
【讨论】: