2006年7月11日
今天财务一早来找我发难,问你写的软件怎么回事,怎么同样的计算结果一边是16.82,一边是16.83,我也奇怪。细细一研究,原来被ROUND函数给暗算了,这个结果是四舍五入后的结果,本身是16.825,ROUND函数有BUG我早就知道,但是一直没有“上过当”,没想今了栽了。Round函数在遇到5时四舍五入“极其随便”,有时候进位,有时候舍去,不知道是什么原则,不去浪费时间研究了。解决问题为第一原则,好在网上有Dave Mc Donald 发布的代替函数,可替换ROUND使用。

其他会进位。[smile]
不过看不太懂你的想法,可能是我的环境太简单的缘故
:D
'自定义自四舍五入函数
'解决ACCESS97以下版本不支持Round函数
'解决Round"有名"的四舍六入现象
'参数: Number , 要进入四舍五入的数值
'参数:N,要保留的小数位数,不足时以0补上
'用法:
'Print myRound(1.4367, 2)
'1.44
Function myRound(Number As Double, N As Integer) As String
myRound = Format(Int(Number * (10 ^ N) + 0.5) / (10 ^ N), "0." & String(N, "0"))
End Function
下面的这个函数(算术四舍五入平衡算法)考虑了负数的处理改编自微软文档,可以用于财务系统开发:
<div style="color:blue;">
Function SARound(ByVal X As Currency, Optional ByVal Factor As Long = 2) As Currency
SARound = Fix(X * 10 ^ Factor + Sgn(X) * 0.5) / 10 ^ Factor
End Function
</div>
如果把Fix变为Int就成为不平衡算法。
MS文档原文:
http://support.microsoft.com/default.aspx?scid=kb;en-us;196652