首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++强制转换精度有关问题

2013-07-01 
C++强制转换精度问题 int i 87800 double dt (double) i double d dt/1000dt87800.000000000000

C++强制转换精度问题
 int i = 87800;
 double dt = (double) i;
 double d = dt/1000;



dt=87800.000000000000

但是为什么d=87.799999999999997

求指教  多谢
C++
[解决办法]
与强制转换无关。
double是二进制表示,多数十进制小数都不能用二进制精确表示。
[解决办法]

引用:
 int i = 87800;
 double dt = (double) i;
 double d = dt/1000;



dt=87800.000000000000

但是为什么d=87.799999999999997

求指教  多谢

搞错了,有15位的精度,应该是double表示的问题,不能精确表示87.8
[解决办法]
1 如果这个数可以通过连续乘2变成整数,那么它就可以用二进制精确表示。
2 如果一个数可以用二进制精确表示,并且没有超出double的精度范围,那么它就可以用double精确存储。

87.8不符合第1条,所以无法用double精确表示。
你只能在输出时要求只保留小数点后一位,输出函数会处理这个问题。

要想精确表示它,需要使用十进制定点数,浮点处理指令中有处理BCD数据的指令,但C++中没有提供这个类型。

热点排行