use*_*924 3 c++ type-conversion
以下程序显示了我在c ++中看到的奇怪的double to 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;
}
Run Code Online (Sandbox Code Playgroud)
当我编译并运行程序时,我看到:
g++ test.cpp
./a.out
d = 33222.221
d = 33222221 | i = 33222220
Run Code Online (Sandbox Code Playgroud)
为什么我不等于33222221?编译器版本是GCC 4.3.0
vir*_*tor 10
浮点表示几乎从不精确(仅在特殊情况下).每个程序员都应该读到:每个计算机科学家应该知道的关于浮点运算的内容
简而言之 - 您的号码可能是33222220.9999999999999999999999999999999999999999999999999999999999999999998(或类似的东西),截断后变为33222220.
| 归档时间: |
|
| 查看次数: |
2224 次 |
| 最近记录: |