以下程序显示了我在 C++ 中看到的奇怪的 double 到 int 转换行为:
#include <stdlib.h>
#include <stdio.h>
int main() {
double d = 33222.221;
printf("d = %9.9g\n",d);
d *= 1000;
int i = (int)d;
printf("d = %9.9g | i = %d\n",d,i);
return 0;
}
当我编译并运行该程序时,我看到:
g++ test.cpp
./a.out
d = 33222.221
d = 33222221 | i = 33222220
为什么 i 不等于 33222221?
编译器版本为GCC 4.3.0
浮点表示几乎从来都不精确(仅在特殊情况下)。每个程序员都应该阅读以下内容:每个计算机科学家都应该了解的浮点运算知识
简而言之 - 你的号码可能是 33222220.99999999999999999999999999999999999999999999999999999999999999998 (或类似的东西),截断后变成 33222220 。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)