int乘法与浮点乘法的不同结果

时间:2014-12-08 13:16:53

标签: java floating-point int floating-accuracy floating-point-conversion

我有这段代码:

    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应该被提升为float类型,我应该得到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会产生错误结果?

2 个答案:

答案 0 :(得分:2)

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

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

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

2 / 12 = 0.166666667    
0.166666667*6=1

答案 1 :(得分:0)

  

number2应该被提升为浮动类型

将2号 提升为浮动。

  

我应该得到0.96

你应该得到1.0,因为:

2/12 * 6 = 2/2 = 1

0.16 * 6 = 0.96

......那就是为什么。在这种情况下,它与计算int与浮点运算无关,它只是算术运算。先做数学!