数学方程如何在Java中工作?

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触发器浮点计算算术表达式.