C++强制转换精度问题
int i = 87800;
double dt = (double) i;
double d = dt/1000;
dt=87800.000000000000
但是为什么d=87.799999999999997
求指教 多谢
C++
[解决办法]
与强制转换无关。
double是二进制表示,多数十进制小数都不能用二进制精确表示。
[解决办法]
搞错了,有15位的精度,应该是double表示的问题,不能精确表示87.8
[解决办法]
1 如果这个数可以通过连续乘2变成整数,那么它就可以用二进制精确表示。
2 如果一个数可以用二进制精确表示,并且没有超出double的精度范围,那么它就可以用double精确存储。
87.8不符合第1条,所以无法用double精确表示。
你只能在输出时要求只保留小数点后一位,输出函数会处理这个问题。
要想精确表示它,需要使用十进制定点数,浮点处理指令中有处理BCD数据的指令,但C++中没有提供这个类型。