如果你需要那麼你自己的算法試試這個:
WSH.Echo CustomRound(-123456.7) '-123457
WSH.Echo CustomRound(-123456.5) '-123456
WSH.Echo CustomRound(-123456.3) '-123456
WSH.Echo CustomRound(123456.7) '123457
WSH.Echo CustomRound(123456.5) '123457
WSH.Echo CustomRound(123456.3) '123456
Function CustomRound(nValue)
CustomRound = Int(nValue + 0.5)
End Function
或...
WSH.Echo CustomRound2(-123456.7) '-123457
WSH.Echo CustomRound2(-123456.5) '-123457
WSH.Echo CustomRound2(-123456.3) '-123456
WSH.Echo CustomRound2(123456.7) '123457
WSH.Echo CustomRound2(123456.5) '123457
WSH.Echo CustomRound2(123456.3) '123456
Function CustomRound2(nValue)
CustomRound2 = Sgn(nValue) * Int(Abs(nValue) + 0.5)
End Function
嗯......多一個想法:)
Function RoundFrm(nValue)
RoundFrm = Null
If IsEmpty(nValue) Or _
Not IsNumeric(nValue) Then Exit Function
RoundFrm = FormatNumber(nValue, 0)
End Function
而且使用以上的想法可以使功能更完整...
Function RoundEx(nValue)
Select Case VarType(nValue)
Case vbInteger, vbLong
RoundEx = nValue
Case vbSingle
RoundEx = CSng(FormatNumber(nValue, 0))
Case vbDouble
RoundEx = CDbl(FormatNumber(nValue, 0))
Case vbCurrency
RoundEx = CCur(FormatNumber(nValue, 0))
Case Else: RoundEx = Null
End Select
End Function
你有什麼反對Round - 'round(2.6,0)'?無可否認,它讓銀行家四捨五入,但這似乎是你想要的。另見http://blogs.msdn.com/b/ericlippert/archive/2003/09/26/bankers-rounding.aspx – Fionnuala 2013-03-15 22:52:56
「給我一些奇怪的錯誤」對任何人都沒有意義,除了你,因爲我們看不到你的屏幕或閱讀你的想法。如果您遇到錯誤,請提供您正在收到的確切錯誤**或您遇到的問題,包括您收到的任何錯誤消息。 (你可以使用'Round'(或'Ceiling',如果你總想收起來;它可能是VBScript中的Ceil'--我不記得了),其中任何一種都比試圖寫自己的更好。) – 2013-03-15 22:53:24
@Remou這次我必須自己制定一個算法,所以我不能使用編程語言的嵌入式函數。 – 2013-03-15 22:57:34