我有一个方程j + f * d,其中j = 4 long和f = 5.0F float和d = 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,其中j = 4 long和f = 5.0F float和d = 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.0f的,这与5(实际上,不仅仅是乘法)不同。5是整数类型;5.0f是浮点型。Java 不会自动将结果降级为不能容纳尽可能多不同数字的数据类型。
(不要接受这个答案。Kon的信息更重要。)