1

我有以下代码:

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 中的代码,但没有成功。

我可以寻求您的帮助/建议吗?任何提示都受到高度赞赏。提前致谢!

4

1 回答 1

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
于 2013-03-15T23:14:34.967 回答