Android Round方法有一些不正确的错误

时间:2017-07-19 16:10:12

标签: android

今天,当我在Android中编码时,我发现了Android中的一个错误,无法找到处理它的方法。

问题是

int PERT = Math.round(100 * (Total - StokAdet) / Total);

一切都很好但是当Total为12且StokAdet为10时,则会发生一些神奇的事情,结果会让我感觉不到16岁。

通常结果是16.6666667但是当舍入时它必须变为17。 但它返回16。 我希望能听到你的声音。感谢..

3 个答案:

答案 0 :(得分:3)

我猜这是因为你在这里做整数除法。所以100 * (Total - stokAdet) / Total已经是16了。可能是因为Total和StokAdet都是整数。

因此,如果我们像java那样逐步评估它:

Total - StokAdet = 12 - 10 = 2

100 * (Total - StokAdet) = 100 * (12 - 10) = 200

100 * (Total - StokAdet) / Total = (100 * (12 - 10)) / 12 = 16

这最后一点可能看起来很奇怪,因为它应该是正常算术的16.66666 ... 7?好吧,因为我们使用Java并且所有数字都是整数,输出也将是整数。整数不能表示小数点后的位(“.66666 ... 7”位)。现在它可能看起来很粗糙,但Java所做的只是抛弃了“.66666 ... 7”位,所以16.66666 ...... 7变成了16。

但是,如果Total或StokAdet值为float,则计算会按预期为您提供数字。

答案 1 :(得分:0)

这很好:

int PERT = Math.round(100 * (Total - StokAdet) / Total);

只需添加以下内容

int i = Math.round(PERT);

然后i是四舍五入的数字。

答案 2 :(得分:0)

这不是一个错误,它是一个功能。 H.Brooks回答显示了如何绕过它。

为什么呢?你正在整数工作。并且整数不会随着划分而向上或向下舍入。他们被切断了。在Java中,int 1.9999999999999始终为1,而不是2。因此,请花点时间为正确的值选择正确的变量。

进一步阅读:Division of integers in Java