select round(round(610948.05/72720,15)*36360,2) from dual;Oracle中得到的值:305474.02
Excel中得到的值: 305474.03
delphi/VB中得到的值:305474.03select round(round(529690.75/18368,15)*9184,2) from dual;Oracle中得到的值:264845.37
Excel中得到的值: 264845.38
delphi/VB中得到的值: 264845.38
怎么样能够使Oracle得到的值与下面两种一致?

解决方案 »

  1.   

    select round(round(529690.75/18368,18)*9184,2) from dual;
    试试,结果应该是一样的,四舍五入的
      

  2.   


    scott@YPCOST> select round(round(610948.05/72720,16)*36360,2) from dual;ROUND(ROUND(610948.05/72720,16)*36360,2)
    ----------------------------------------
                                   305474.03scott@YPCOST> select round(round(529690.75/18368,18)*9184,2) from dual;ROUND(ROUND(529690.75/18368,18)*9184,2)
    ---------------------------------------
                                  264845.38
      

  3.   

    select round((610948.05/72720)*36360,2) from dual;
    305474.03select round(round(610948.05/72720,15)*36360,2) from dual;
    305474.02
      

  4.   

    各位,Round是不能随便取小数位数的,这个是有规定的,别人是在VB中取的15位小数。我是存储过程写在Oracle中的,但是对不上。上面各位让我改Round的小数位数,这两条对上了,但是又会引起一片错误。
      

  5.   

    有个方法,不知道适用你不了这样做
    select round(floor(round(610948.05/72720,15)*36360*100),2)/100 from dual;试试,但是可能都会多出1来,看看行不啊,呵呵
      

  6.   

    用计算器算了下,oracle算的是没问题的。
    610948.05/72720=8.4013758250825082508250825082508
    取15位8.401375825082508
    8.401375825082508*36360= 305474.02499999999088
    四舍五入就是305474.02
      

  7.   

    另外,如3楼zhuomingwang测试,内层round取16位进行计算为.03
    感觉楼主应该确认下Delphi里是如何计算
      

  8.   


    得到的还是305474.02,与Excel算的不一样。
      

  9.   


    windows计算器的精度也是很高的,与Oracle一样。但是Delphi和VB中存放在Double变量中就不一样了,即使不存放在Double中,直接返回也是这样。
      

  10.   

    使用double进行运算,本来就有精度损失的。
    delphi和VB中的计算应该有错的。你可以检查一下其中的代码。
      

  11.   


    round(610948.05/72720,18)*
      

  12.   

    楼主。你确认excel和delphi在第一步的时候也是取的15位小数么?
    怀疑你是在用不同的精度在计算,结果不同很正常吧。
      

  13.   

    我的要求很简单,用统一的算法,在Oracle中得到的值与Excel中出来的值完全一样。
      

  14.   

    那你得先确认excel里和delphi里的计算规则,第一步round是按多少精度计算的。
      

  15.   

    建议还是使用这种方式计算
    SQL> select round(610948.05*36360/72720,2) from dual;
     
    ROUND(610948.05*36360/72720,2)
    ------------------------------
                         305474.03
     
    SQL>