VBScript中的此类代码将返回错误的结果:
MsgBox Round(4.99985,4)
它将返回4.9998
,但正确的结果是4.9999
。我知道这与VBScript如何处理带浮点的数字有关,有些数字不能用二进制表示,但请告诉我:
- 这里到底发生了什么
- 对此,可能的解决方法是什么
谢谢!
这是预期的结果,也就是所谓的银行家取整。查看Round
功能的描述(我添加了粗体):
Round函数执行Round to even,这与Round to larger不同。。。。如果表达式正好位于两个可能的四舍五入值的中间,则函数将返回其最右边的数字为偶数的可能的四入值。
要四舍五入到更大,可以使用以下函数(取自此处):
Function RoundToLarger(ByVal Number, ByVal NumDigitsAfterDecimal)
RoundToLarger = CDbl(FormatNumber(Number, NumDigitsAfterDecimal))
End Function
(注意:负数向下取整。)