glc*_*hen 6 java math operators
当我做这样的事情
int test = 5 + 3 * (4 - 1) / 2;
Run Code Online (Sandbox Code Playgroud)
我得到9.我怀疑这是因为int舍入.但是,当我这样做
float test = 5 + 3 * (4 - 1) / 2;
Run Code Online (Sandbox Code Playgroud)
我也得到9.然而,当我这样做
float test1 = 5;
float test2 = 4.5;
float test = test1 + test2;
Run Code Online (Sandbox Code Playgroud)
测试最终输出9.5.有人可以解释这背后的逻辑吗?为什么我在第二个例子中得不到9.5?谢谢.
Gre*_*ill 17
在第二个示例中,虽然您将结果分配给类型变量float
,但计算本身仍然与第一个示例完全相同.Java不会查看目标变量类型来确定如何计算右侧.特别是,子表达式3 * (4 - 1) / 2
导致4
.
要解决此问题,您可以使用浮点文字而不是所有整数:
float test = 5 + 3 * (4 - 1) / 2.0f;
Run Code Online (Sandbox Code Playgroud)
使用2.0f
触发器浮点计算算术表达式.