我有上面的代码
private float farenaitCelsiusMath(float f) {
float result;
result = (f-1)*(2/3);
return result;
}
当我在模拟器上运行应用程序时,它评估为0给我的任何值。
但是当result = (f-1)*2/3;
的第三行正确评估时。
为什么会这样?我应该知道java中的算术表达式吗?
答案 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)
。这不会在运行时花费任何成本,而是由编译器完成的。