- 论坛徽章:
- 0
|
操作系统:rhel7.0
gnu c lib: 2.17
项目是一个代理服务,将服务器的数据转发给客户,从客户获取数据转发给服务器, 除了glibc没有用到其它库
有这样一个问题:
服务器发送过来一个字符串“2277.24”, 代理将该串 atof(“2277.24”) 插入数据库,然后 atof(“2277.24”)*100 转发给客户端(代理运算时只处理整数,因此需要乘以100),客户端再除以100
问题来了, 数据库里是2277.24,客户端将该数字除以100后,得到的是2277.23
其实有一个很简单的方法测试该问题
printf(“%d\n”, (int)(2277.24*100)); //2277.24是double, 输出227723
printf(“%d\n”, (int)(2277.24f*100)); //2277.24f是float,输出227724
printf(“%d\n”, (int)(atof("2277.24")*100)); //atof("2277.24")返回的是double, 输出227723
printf(“%d\n”, (int)((float)atof("2277.24")*100)); //转换成float输出227724
我知道浮点数运算有误差,但最近项目里出现误差的客户端实在太多,我想用gmp或mpfr来解决精度问题, 但总感觉没有必要用一个庞大的库来解决这个问题
请高手指点
|
|