繁体   English   中英

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

[英]How do math equations work in Java?

当我做这样的事情

int test = 5 + 3 * (4 - 1) / 2;

我得到9.我怀疑这是因为int舍入。 但是,当我这样做

float test = 5 + 3 * (4 - 1) / 2;

我也得到9.然而,当我这样做

float test1 = 5;
float test2 = 4.5;
float test = test1 + test2;

测试最终输出9.5。 有人可以解释这背后的逻辑吗? 为什么我在第二个例子中得不到9.5? 谢谢。

在第二个示例中,虽然您结果分配给 float类型的变量,但计算本身的执行方式仍与第一个示例完全相同。 Java不会查看目标变量类型来确定如何计算右侧。 特别是,子表达式3 * (4 - 1) / 2导致4

要解决此问题,您可以使用浮点文字而不是所有整数:

float test = 5 + 3 * (4 - 1) / 2.0f;

使用2.0f会触发算术表达式的浮点计算。

虽然表示的结果5 + 3 * (4 - 1) / 2在浮法中,实际的评价与的整数的精度完成,这意味着划分9 / 2返回4,而不是4.5你将得到如果他们被评估为浮动。

表达式有自己的类型。 所以从以下开始:

5 + 3 * (4 - 1) / 2

每个值都有自己的类型。 这种类型恰好是int ,所以这与:

((int)5) + ((int)3) * (((int)4) - ((int)1)) / ((int)2)

让我们更清楚地了解我们正在处理的问题。 只有在将其评估为9后才会将其分配给浮点数。

简短的回答是整数类型在模运算上运行,模数为1,并丢弃余数。

由于您将test为整数,因此模数运算采用模数1(例如9.5 mod 1),int test = 5 + 3 *(4 - 1)/ 2;

使用32位或64位浮点数,这将得到9.5; 但是,因为您将testint ,所以余数将被丢弃, test引用的值为9。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM