Java新手:为什么java没有给我正确的结果?

时间:2013-03-20 18:43:10

标签: java calc

我是java新手,我想这样做:

System.out.println(1 / 20 * 1000);

应该输出50,但由于某种原因它输出0。

我通过输入

修复了它
System.out.println((int) (1F / 20F * 1000F));

(我知道你不需要int cast,但我只想知道它是否有效)

为什么Java会给我这个奇怪的结果?

3 个答案:

答案 0 :(得分:2)

因为Java正在执行integer division(JLS 15.17),其中1 / 20为0,小数部分被丢弃。

指定1Ffloat字面值。在这种情况下,Java将按预期执行除法。

答案 1 :(得分:1)

让我们分解吧。你的代码有点像这样:

int tmp1 = 1 / 20;
int tmp2 = tmp1 * 1000;
System.out.println(tmp2);

现在请记住,当两个操作数都是整数时,操作将使用整数算法执行。这意味着tmp1将为0 ...这意味着tmp2将为0。

您的第二个版本相当于:

float tmp1 = 1F / 20F; // Both values are of type "float" here
float tmp2 = tmp1 * 1000F;
int tmp3 = (int) tmp2;
System.out.println(tmp3);

现在tmp1 大致 0.05,tmp2 大致 50,而tmp3是50.值得注意由于浮点运算的变幻莫测,我不会非常惊讶地得到49的值 - tmp1不能正好 0.05,因为它不能表示为float

一般来说,如果一个大的陈述没有达到预期的效果,那么值得将其分解为较小的陈述 - 这样可以让您更容易地逐步调试它。

答案 2 :(得分:0)

分割时有2个整数值

int / int

你只得到int类型的结果 - 点之前的数字