如果你需要那么你自己的算法试试这个:
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