VBScript中的此类代码将返回错误的结果:
MsgBox Round(4.99985,4)
它将返回4.9998
,但正确的结果是4.9999
。我知道它与VBScript如何处理带浮点的数字有关,有些数字不能用二进制表示,但请告诉我:
谢谢!
答案 0 :(得分:4)
这是预期的结果,所谓的bankers' rounding。查看description of the Round
function(我添加的粗体):
Round函数执行 round to even ,这与 round to greater 不同。 ... 如果表达式正好在两个可能的舍入值之间,则该函数返回可能的舍入值,其最右边的数字是偶数。
要舍入到更大,您可以使用以下函数(取自here):
Function RoundToLarger(ByVal Number, ByVal NumDigitsAfterDecimal)
RoundToLarger = CDbl(FormatNumber(Number, NumDigitsAfterDecimal))
End Function
(注意:负数向下舍入。)