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

时间:2012-03-14 10:50:45

标签: vbscript floating-point floating-accuracy ieee-754

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

MsgBox Round(4.99985,4)

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

  1. 这里究竟发生了什么?
  2. 可能的解决方法是什么?
  3. 谢谢!

1 个答案:

答案 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

(注意:负数向下舍入。)