将double转换为int的结果是错误的

时间:2012-09-14 12:41:30

标签: c++ casting floating-accuracy

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

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

最初PriorityJob = 1.4roundedTotal未定义。此时评估PriorityJob * 100.0会产生140。之后roundedTotal = 139

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

1 个答案:

答案 0 :(得分:10)

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

正如1/3 = 0.33333333...无法完全表示为小数,因此1/10(因此大多数非整数十进制值,包括1.4)可以' t完全表示为二进制分数。它将由最接近的可表示值表示,该值可能稍微大于或小于" true"值。

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