select 41400 * (1+(0.005*2/12)) cr,
round(41400 * (1+(0.005*2/12)),0) rcr from dualcr          rcr 
41434.5     41434
select 41400+41400*(0.005*2/12) cr,
  round(41400+41400*(0.005*2/12),0) rcr from dualcr          rcr 
41434.5     41435请教各位为啥前面那个没有进位,谢谢

解决方案 »

  1.   

    你前面那个又没用round函数,指定保留几位小数
      

  2.   

    SQL> select 41400*1.00083333,41400*0.00083333 from dual;41400*1.00083333 41400*0.00083333
    ---------------- ----------------
          41434.4999        34.499862
      

  3.   

    浮点数运算的问题。计算机中是无法表示所有的有理数的。可以参考一下 IEEE 754
      

  4.   

    不知道计算原理是怎样的.
    感觉就是第二种情况好像是在作乘法的时候就已经将0.49...转成了0.5,然后再对0.5进行round;而第一种是在操作0.49...
      

  5.   

    试过了,确实如楼主所说。
    SQL> col r format 0.000000000
    SQL> SELECT 1.000000000/74.000000*0.28338300000000 r FROM dual;           R
    ------------
     0.003829500SQL> SELECT round(1.000000000/74.000000*0.28338300000000,6) r FROM dual;           R
    ------------
     0.003829000SQL>ORACLE的round遇到复杂表达式或精度比较大时,出现不准确的情况,估计ORACLE内部错误。
    http://www.soidc.net/discuss/30/040101/00/487306_1.html
      

  6.   

    SQL> select 41400 * (0.005*2/12) from dual;41400*(0.005*2/12)
    ------------------
                  34.5SQL> select 1 from dual where 41400 * (0.005*2/12)=34.5;no rows selected