为什么我的int 0?

时间:2012-11-30 16:28:45

标签: java math

  

可能重复:
  Why does int exp1 = 14/20*100; equals ‘0’ in java?

我正在使用它:

int newWidth = Math.round(297 * (40 / 414));

在代码中,数字实际上是变量,但是那些是他们持有的,当我运行代码时newWidth回到0,我期待28或29.我看不出是什么这里错了......

9 个答案:

答案 0 :(得分:9)

40 / 414会立即四舍五入为0,因为它只适用于整数。您必须将其中一个操作数强制转换为double / float或立即使用double

int newWidth = (int)Math.round(297 * (40.0 / 414));

或:

int newWidth = (int)Math.round(297 * ((double)40 / 414));

答案 1 :(得分:5)

由于40/414等于0,因此297*0 = 0Math.round(0) = 0

改为使用双打。

答案 2 :(得分:3)

int newWidth = (int)Math.round(297 * (40d / 414));

答案 3 :(得分:2)

更改为int newWidth = (int)Math.round(297 * (40.0 / 414));

答案 4 :(得分:2)

java中的int不使用小数位...因此你应该使用double。它给你一个0,因为在()40/414 = 0。

答案 5 :(得分:2)

问题从40/414开始:那是整数除法,它返回一个int。在这种情况下:0。

要修复它,将其中一个整数转换为双精度或浮点数,例如((浮动)40/414)。

答案 6 :(得分:1)

40/414的结果为零。这是整数除法的结果。将分子或分母更改为浮点值以获得所需结果

答案 7 :(得分:1)

如上所述,我要投入2美分,问题在于整数除法。强制这种除法将结果视为双精度的另一种方法:

int newWidth = Math.round(297 * (40.0 / 414));

答案 8 :(得分:0)

40/414四舍五入为0.

你可能想要的是

int newWidth = (297 * 40) / 414;