double d = strtod("166.82500",NULL);
d*=100000.0;
unsigned long l = d;
为什么 l 结果是0x00FE8E03不是0x00FE8E04;
double d = strtod("166.82000",NULL);
d*=100000.0;
unsigned long l = d;
为什么 l 结果是0x00FE8C10 正常;
...全文
1327打赏收藏
求助 double 数据转 long
double d = strtod("166.82500",NULL); d*=100000.0; unsigned long l = d; 为什么 l 结果是0x00FE8E03不是0x00FE8E04; double d = strtod("166.82000",NULL); d*=100000.0; unsigned long l = d; 为什么 l 结果是0x00FE8C10 正常;
[Quote=引用 2 楼 w81211984 的回复:]
double d = strtod("166.82500",NULL);
d*=100000.0;
unsigned long l = (unsigned long)d;
为什么 l 结果是0x00FE8E03不是0x00FE8E04;
double d = strtod("166.82000",NULL);
d*=100000.0;
unsigned long l = (……
[/Quote]
我并没有说显式的强制转换就对啊。强制转换本身就是使用截尾法,哪怕0.99999的小数也是被截掉的,所以保险期间,转换成整数时,加上0.5再强制转换。