无法理解将长整型和浮点数相加然后乘以双精度的方程的答案如何有意义



我有一个方程j + f * d,其中j = 4 longf = 5.0F floatd = 6.0 double,答案是34.0 double

我理解34.0是double

我不明白这个方程怎么会变成34.0,5.0F != 5在用它相乘时是不是?

J = 4 (long)
f = 5.0F (float)
d = 6.0 (double)

操作顺序优先。乘法发生在加法之前。

j + f * d
4 + 5.0 * 6.0
4 + 30.0
34.0

此链接详细说明了Java运算符的优先级。记住以下内容是很好的信息:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html

除了Kon提到的操作顺序之外,double实际上是唯一不会失去精度的类型,因为6.0已经是double了。Java不会尝试根据输出类型中包含的值来降级输出类型。它只使用与输入类型兼容的最小类型。由于您已经有了double("最大"的基元数据类型,即具有最大的数字范围),Java会输出它。

所以,从某种意义上说,5.0f5不一样是正确的(实际上,不仅仅是乘法)。CCD_ 13是一个整数类型;5.0f是浮点型。Java不会自动将结果降级为不能容纳那么多不同数字的数据类型。

(不要接受这个答案。Kon的信息更重要。)

最新更新