1

可能重复:
为什么 int exp1 = 14/20*100; 在java中等于'0'?

我正在使用这个:

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

在代码中,数字实际上是变量,但它们是它们所持有的,当我运行代码时newWidth返回为 0,我期待 28 或 29。我看不出这里有什么问题......

4

9 回答 9

9

40 / 414立即四舍五入,0因为它仅适用于整数。您必须将其中一个操作数转换为double/floatdouble立即使用:

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

或者:

int newWidth = (int)Math.round(297 * ((double)40 / 414));
于 2012-11-30T16:30:14.010 回答
5

因为40/414等于0, 所以297*0 = 0Math.round(0) = 0

改用双打。

于 2012-11-30T16:30:11.050 回答
3

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

于 2012-11-30T16:31:55.147 回答
2

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

于 2012-11-30T16:29:52.950 回答
2

Java 中的 int 不使用小数位...因此您应该为此使用双精度数。它给你一个 0 因为在 () 40/ 414 = 0 里面。

于 2012-11-30T16:31:11.293 回答
2

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

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

于 2012-11-30T16:32:17.927 回答
1

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

于 2012-11-30T16:29:57.067 回答
1

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

int newWidth = Math.round(297 * (40.0 / 414));
于 2012-11-30T16:42:55.543 回答
0

40/414 舍入为 0。

你可能想要的是

int newWidth = (297 * 40) / 414;
于 2012-11-30T16:48:54.383 回答