我有一个方程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的信息更重要。)