0

我有一个方程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)
4

2 回答 2

3

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

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

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

于 2013-07-15T00:48:23.957 回答
2

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

所以,从某种意义上说,你是对5.0f的,这与5(实际上,不仅仅是乘法)不同。5是整数类型;5.0f是浮点型。Java 不会自动将结果降级为不能容纳尽可能多不同数字的数据类型。

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

于 2013-07-15T00:52:42.417 回答