带括号时,算术表达式的计算结果为零

时间:2012-02-03 19:36:53

标签: android arithmetic-expressions

我有上面的代码

private float farenaitCelsiusMath(float f) {

        float result;
        result = (f-1)*(2/3);
        return result;
    }

当我在模拟器上运行应用程序时,它评估为0给我的任何值。

但是当result = (f-1)*2/3;的第三行正确评估时。

为什么会这样?我应该知道java中的算术表达式吗?

1 个答案:

答案 0 :(得分:3)

因为(2/3)是INTEGER除法,因为整数除法被截断,所以它的计算结果为0。

  • (f-1)是FLOAT,因为f是FLOAT
  • (2/3)是INTEGER值0,因为整数除法截断
  • (f-1)*(2/3)是FLOAT,因为(f-1)是FLOAT,值0是因为0的任何时间都是0。

当它是(f-1)*2/3时,它的评估结果为

  • (f-1)是FLOAT,因为f是FLOAT;
  • (f-1)*2是FLOAT,因为(f-1)是FLOAT
  • (f-1)*2/3是FLOAT,因为(f-1)*2是FLOAT

要获得您的期望,请将其设为(2./3)(2/3.) - 由于小数点,两者都会被提升为FLOAT - 或者甚至更好地使用强制转换((float)2/(float)3) 。这不会在运行时花费任何成本,而是由编译器完成的。