当我运行以下代码时,似乎存在某种晦涩的舍入错误:

int roundedTotal = (int)(PriorityJob * 100.0);

最初PriorityJob = 1.4roundedTotal是未定义的。那时评估PriorityJob * 100.0会得到140。之后roundedTotal = 139

显然,140.0被解释为139.99999。这是浮点引擎的不足吗?我从来没有见过这样的东西。

最佳答案

几乎每台现代计算机都使用binary representation作为浮点数。

就像1/3 = 0.33333333...不能精确地表示为小数部分一样,1/10(因此,大多数非整数十进制值,包括1.4)也不能精确地表示为二进制小数部分。相反,它将由最接近的可表示值表示,该值可能会比“true”值稍大一些或小一些。

您可能需要舍入到最接近的整数:(int)(PriorityJob * 100.0 + 0.5)

09-07 06:01