Java 为什么这个整数方程输出0

Java 为什么这个整数方程输出0,java,math,Java,Math,我是Java新手,请帮助我: System.out.println(3 * (4 / 5) * 6); 为什么答案是0?(4/5)是0,因为它们是整数值,0,8的结果四舍五入为0。执行(4f/5F)。现在结果将和预期的一样。这是一个非常有用的链接。因为您使用的是整数,而不是浮点数4/5是0.8,但整数不能存储该数字,因此将其向下舍入为0。然后方程的其余部分是将数字乘以零,这将始终导致0 将数字转换为3.0,4.0,5.0,6.0,将等式转换为基于浮点的等式 带整数: 3*(4/5)*6=0 使

我是Java新手,请帮助我:

System.out.println(3 * (4 / 5) * 6);

为什么答案是0?

(4/5)
是0,因为它们是整数值,0,8的结果四舍五入为0。执行
(4f/5F)
。现在结果将和预期的一样。这是一个非常有用的链接。

因为您使用的是整数,而不是浮点数
4/5
0.8
,但整数不能存储该数字,因此将其向下舍入为
0
。然后方程的其余部分是将数字乘以零,这将始终导致
0

将数字转换为
3.0
4.0
5.0
6.0
,将等式转换为基于浮点的等式

带整数:

3*(4/5)*6=0

使用浮动:

3.0*(4.0/5.0)*6.0=14.4

记住BODMAS规则


第一个操作将是
除法
意味着将计算
4/5
,它给出
0
(因为4和5是整数,它给出0),任何与
0
相乘的运算都给出
0

这是一个简单的
BODMAS
表达式求值

将对(3*(4/5)*6)进行评估

若要避免0答案,可以将表达式修改为

1. (3 * (4.0 / 5.0) * 6) // return float value
2. (3*4*6)/5 //return integer value
3. (3 * (4/ 5.0) * 6)  // return float value
在这些情况下,此表达式的答案将为非零

问题是这个术语:

(4 / 5)
因为两个数字都是
int
,所以结果将是
int
。java中的整数运算会截断小数部分(它不会取整),因此结果将为零(
0.8
将变为
0
)。

您使用的是整数除法(因为45都是整数):

这就是为什么整个公式

  3 * (4 / 5) * 6 == 0
如果希望将4/5视为浮点除法,并使其结果为0.8,则还应使用浮点数:4.05.0

  System.out.println(3 * (4.0 / 5.0) * 6); // <- 14.4

System.out.println(3*(4.0/5.0)*6);// 因为在您的例子中,4/5=0可以将其更改为双精度并获得小数位数,否则4/5=0.8在Java中整数将舍入为0。你自己试试看。System.out.println(4\5);在小学,你可能会用余数进行整数除法。4除以5等于0,剩余4。或者保持整数do(3*4*6)/5-将尽可能保持精度,而无需使用浮点或双精度。
  3 * (4 / 5) * 6 == 0
  System.out.println(3 * (4.0 / 5.0) * 6); // <- 14.4
14.400000000000002