5

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

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

最初是未定义的PriorityJob = 1.4。在这一点上进行roundedTotal评估给出. 之后。PriorityJob * 100.0140roundedTotal = 139

显然,140.0 被解释为 139.99999。这是浮点引擎的缺陷吗?我从来没有见过这样的事情。

4

1 回答 1

10

几乎每台现代计算机都使用二进制表示浮点数。

正如1/3 = 0.33333333...不能完全表示为小数一样,1/10(因此大多数非整数十进制值,包括1.4)也不能完全表示为二进制分数。相反,它将由最接近的可表示值表示,该值可能略大于或小于“真实”值。

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

于 2012-09-14T12:52:41.590 回答