站內搜尋

2008/5/20

VBScript Round 介紹及修正

原標題:很瞎的 Round (VBScript)

今天在上班的時後,聽到老闆提到,有人用 VBScript 寫四捨五入,
結果寫出了 bug .. 一追究之下,才發現..原來..Round不是我們想像中的 Round..


據他們的說法,Round 在 n.5 的情況下,會發生很多靈異的狀況。
而也就是因此,他們的程式出現了一些 Bug ..
啊我那個無聊的耳朵,在聽到他們的談話之後,就忍不住上了網,查了一下資料。

原來,Round 還真的不是那麼簡單的..
最接近參數 d 的整數。如果 d 正好為兩個整數的中間數 (一個為偶數,另一個為奇數),則會傳回偶數。這是所謂的銀行家四捨五入法(Round-To-Even),也叫做Bankers' Rounding
這是一段在網路上看到的文字,應該是自 MSDN 中翻譯出來的,感謝這位老大哥把這東東提出來談,

也因此,在使用 VBScript 的 round 時,應該還要自行加一堆有的沒有判斷式,

但是在 JavaScript 的部份,卻不會出現這個問題,基於寫程式人員的「偷懶指導原則」,
所以便利用 JavaScript 寫下了一個讓 VBScript 呼叫的 round 函式,以下是想法的實做。

<Script language="JavaScript">
function Jround(num)
{
    if (arguments[1]) return num.toFixed(arguments[1]) ;
    else return Math.round(num)
}
</Script>

<Script language="VBScript">
msgbox round(4.5)
msgbox Jround(4.5)

msgbox round(3.5)
msgbox Jround(3.5)

msgbox round(2.5)
msgbox Jround(2.5)

msgbox round(3.0005,3)
msgbox Jround(3.0005,3)
</Script>


希望這個小東西可以幫助和我有相同問題的人解決麻煩。

沒有留言:

張貼留言

熱門文章