Vbscript 不能将数字四舍五入

Vbscript 不能将数字四舍五入,vbscript,rounding,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

我有以下代码:

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)
将a调暗为最长
a=输入框(“a=”)
尺寸与长度相同
nr_cifre=0
长
n=a
当n 0时做什么
n=n/10
净利率=净利率+1
环
如果a-a模数(10*nr\u cifre)=0.5,则
a=a+0.9+(额定值*10)
如果结束
MsgBox a模块(10个)
基本上,它试图对数字进行汇总。因此,2.3将变为2。此外,它还尝试将其四舍五入,例如,2.5到3

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


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

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

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
或者

嗯。。。还有一个想法:)

使用上述思想可以使功能更加完整,如

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)
?诚然,它执行四舍五入,但这似乎是你想要的。请看“给我一些奇怪的错误”对任何人来说都是毫无意义的,除了你,因为我们看不到你的屏幕,也看不懂你的心思。如果您遇到错误,请提供您遇到的确切错误或问题,包括您收到的任何错误消息。(你可以使用
Round
(或者
天花
,如果你总是想用VBScript进行取整;它可能是
Ceil
,我不记得了),这两种方法都比试着自己写要好。)@Remou这次我必须自己做一个算法,所以我不能使用编程语言中的嵌入式函数。@Ken White哦,是的,对不起,例如,对于12345.6,它给了我2506…我还希望0.5变成1,而不是银行家取整时的0。我在我的代码上尝试了类似的方法,但没有使用Int函数,而是使用mod,这会给出相同的结果。事实上,我认为错误是由数字计数循环产生的…我用一个以上的函数更新我的答案。我在语言中使用了这两个概念,但并没有内置圆形函数(只有Ceil/Floor),我认为这已经被证明了。
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