无法围绕一个数字

时间:2013-03-15 22:41:20

标签: vbscript rounding

我有以下代码:

Dim a as Long
a = InputBox("a=")
Dim nr_cifre as Long
nr_cifre = 0
Dim n as Long
n=a
Do While n <> 0
    n=n / 10
    nr_cifre = nr_cifre + 1
Loop
If a - a mod (10 * nr_cifre) = 0.5 Then
    a=a+0.9+(nr_cifre*10)
End If
MsgBox a mod (10 * nr_cifre)

基本上,它试图对数字进行舍入。因此,2.3将变为2.此外,它会尝试向上舍入,例如,2.5到3。

该示例适用于小数字,例如1234,5。但是,如果我试图收集12345,6,它会给我一些奇怪的错误。我也尝试过VB6中的代码,但没有成功。

我可以请求您的帮助/建议吗?任何提示都非常感谢。提前谢谢!

1 个答案:

答案 0 :(得分:3)

如果您需要自己的算法,请尝试以下方法:

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