close

轉貼文章:http://www.cnblogs.com/lizhiwen/archive/2007/08/15/856347.html

最近在做一個報表,這個報表有個原例子,原例子是用asp做的,按理兩個報表顯示的結果應該是一樣的。可不知為什麼,顯示的小數總是差點,找來找去原來是round函數惹的。

 VB6中文版說Round函數是四捨五入函數,實際上這個函數採用的四捨六入五留雙。VB的Round改採用的算法是這樣的:
    1.25留一位,則1.2=round(1.25)
    如果是1.35,則1.4=round(1.35)
    奇進偶不進。這樣在一大串需要四捨五入的數相加相減相乘時誤差小一點。eg:1.25+1.35+1.45+1.55+1.15+1.65=8.4=round(1.25)+round(1.35)+round(……
    ROUND函數符合國家和國際標準,該函數是正確的。原先的四捨五入只是一個簡化。
    在微軟的Knowledge Base的文章:「Q194983 PRB: Round Function Different in VBA 6 and Excel Spreadsheet」和微軟的Knowledge Base的文章:「Q189847 INFO: New String and Format Functions in Visual Basic 6.0」中都指出Round函數實行Banker舍入,而不是我們習慣的算術舍入(四捨五入)。你可以參考微軟的Knowledge Base的文章:「Q196652 HOWTO: Implement Custom Rounding Procedures」,它對於舍入問題有詳細的討論。

arrow
arrow
    全站熱搜

    twpbic9314 發表在 痞客邦 留言(1) 人氣()