免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4208 | 回复: 3
打印 上一主题 下一主题

informix四舍五入的诡异现象 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-02 16:32 |只看该作者 |倒序浏览
本帖最后由 sanmeimu69 于 2010-12-03 18:31 编辑

1.在程序中逻辑如下:
   a=4.675,30000;
   b=30000*a;
   update table set amt=(amt+:b) where c='xxx';
   这里运行大概22遍(这里还不确认),amt的累加就会四舍五入错误,
  
2.如果在上面程序中采用,
    a=4.675/30000;
   b=30000*a;
   d=table.amt+b;
   decround(d,2);
   update table set amt=d where c='xxx';
    OK
PS:以上运算均采用decdiv decmul decadd 等的esql/c标准函数,这里数据库中amt小数点精确到第二位
坐着等大牛解释

论坛徽章:
0
2 [报告]
发表于 2010-12-02 17:56 |只看该作者
回复 1# sanmeimu69


    自己顶起来,经过测试只要是满足a 满足*.**5,而且不能被3整除,都会出现以上问题

论坛徽章:
0
3 [报告]
发表于 2010-12-02 17:57 |只看该作者
回复 1# sanmeimu69


    我大概能理解.a在除以30000再乘以30000,a由4.675变为4.674999999999999999999999999,但是sql语句中数据想加是基于什么机制呢

论坛徽章:
0
4 [报告]
发表于 2010-12-03 15:58 |只看该作者
回复 1# sanmeimu69


    简单点就是在sql语句中的加法运算和decadd运算,有什么区别.请大牛解释
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP