sanmeimu69 发表于 2010-12-02 16:32

informix四舍五入的诡异现象

本帖最后由 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小数点精确到第二位
坐着等大牛解释

sanmeimu69 发表于 2010-12-02 17:56

回复 1# sanmeimu69


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

sanmeimu69 发表于 2010-12-02 17:57

回复 1# sanmeimu69


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

sanmeimu69 发表于 2010-12-03 15:58

回复 1# sanmeimu69


    简单点就是在sql语句中的加法运算和decadd运算,有什么区别.请大牛解释
页: [1]
查看完整版本: informix四舍五入的诡异现象