今天,当我在Android中编码时,我发现了Android中的一个错误,无法找到处理它的方法。
问题是
int PERT = Math.round(100 * (Total - StokAdet) / Total);
一切都很好但是当Total为12且StokAdet
为10时,则会发生一些神奇的事情,结果会让我感觉不到16岁。
通常结果是16.6666667但是当舍入时它必须变为17。 但它返回16。 我希望能听到你的声音。感谢..
答案 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
。因此,请花点时间为正确的值选择正确的变量。