VBScript和浮点(双)数字:Round函数返回错误的结果



VBScript中的此类代码将返回错误的结果:

MsgBox Round(4.99985,4)

它将返回4.9998,但正确的结果是4.9999。我知道这与VBScript如何处理带浮点的数字有关,有些数字不能用二进制表示,但请告诉我:

  1. 这里到底发生了什么
  2. 对此,可能的解决方法是什么

谢谢!

这是预期的结果,也就是所谓的银行家取整。查看Round功能的描述(我添加了粗体):

Round函数执行Round to even,这与Round to larger不同。。。。如果表达式正好位于两个可能的四舍五入值的中间,则函数将返回其最右边的数字为偶数的可能的四入值


要四舍五入到更大,可以使用以下函数(取自此处):

Function RoundToLarger(ByVal Number, ByVal NumDigitsAfterDecimal)
  RoundToLarger = CDbl(FormatNumber(Number, NumDigitsAfterDecimal))
End Function

(注意:负数向下取整。)

最新更新