我有上面的代码
private float farenaitCelsiusMath(float f) {
float result;
result = (f-1)*(2/3);
return result;
}
当我在模拟器上运行应用程序时,它评估为 0 无论我给 f 的值。
但是当它的第三行result = (f-1)*2/3;
正确评估时。
为什么会这样?关于java中的算术表达式我应该知道什么吗?
我有上面的代码
private float farenaitCelsiusMath(float f) {
float result;
result = (f-1)*(2/3);
return result;
}
当我在模拟器上运行应用程序时,它评估为 0 无论我给 f 的值。
但是当它的第三行result = (f-1)*2/3;
正确评估时。
为什么会这样?关于java中的算术表达式我应该知道什么吗?
因为(2/3)
是 INTEGER 除法,由于整数除法被截断,因此计算结果为 0。
(f-1)
是 FLOAT 因为f
是 FLOAT(2/3)
是整数值 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 - 或者甚至更好地使用 cast 使其明确((float)2/(float)3)
。这在运行时不需要任何成本,这一切都由编译器完成。