将字符串转化为double类型存在误差,例如:
字符串为1.89转化为double类型为:1.8899999999999.
这是正常的。
在c语言中头文件float.h中有如下定义:
#define DBL_EPSILON 2.2204460492503131e-016 /*smallest such that 1.0+DBL_EPSILON != 1.0 */
也就是说,只要使用double类型,如果两个double类型的数的差小于DBL_EPSILON,这两个数就是相等的。这是使用double类型的前提。
可以测试一下:
double f = 1.89 – atof(“1.89”);
f 为零。因为1.89 – atof(“1.89”)的差值小于DBL_EPSILON,它们就是相等的。
结论:这是正常的,所谓的精度误差是使用double类型必须接受的。