int 乘法与浮点乘法的不同结果 [已关闭]

different result of int multiplication vs float multiplication [closed]

提问人:The Nightmare 提问时间:12/8/2014 最后编辑:The Nightmare 更新时间:12/8/2014 访问量:102

问:


这个问题是由错别字或无法再现的问题引起的。虽然类似的问题可能在这里是主题,但这个问题的解决方式不太可能帮助未来的读者。

8年前关闭。

我有这个代码:

    float number1 = 2f / 12;
    System.out.println(number1);
    int number2 = 6;
    float x = number1 * number2;
    System.out.println(x);

作为输出,我得到:

0.16666667
1.0

为什么?当我将 number1 和 number2 相乘时,number2 应该提升为浮点类型,我应该得到 0.96

当我将代码修改为:

    float number1 = 0.16f;
    System.out.println(number1);
    int number2 = 6;
    float x = number1 * number2;
    System.out.println(x);

我得到了很好的结果:

0.16
0.96

为什么第一个示例中的操作会产生不好的结果?float = float * int

java int 精度 浮点转换

评论


答:

2赞 Maksym 12/8/2014 #1

因为在第二种情况下,您定义了:

float number1 = 0.16f;
//0.16*6=0.96;

但对于第一种情况,你有:

2 / 12 = 0.166666667    
0.166666667*6=1
0赞 user719662 12/8/2014 #2

number2 应提升为 float 类型

2号提升为浮动。

我应该得到 0.96

您应该获得 1.0,因为:

2 / 12 * 6 = 2 / 2 = 1

0.16 * 6 = 0.96

...这就是原因。在这种情况下,它与计算 int 与浮点数算术无关,它只是算术。先算一算!

评论

0赞 12/17/2014
亲爱的反对者,您愿意详细说明这个答案的不足之处吗?