我有以下代码:
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中的代码,但没有成功。
我可以请求您的帮助/建议吗?任何提示都非常感谢。提前谢谢!
答案 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