以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  round2()问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=28179)

--  作者:maomaoxw
--  发布时间:2013/1/21 23:51:00
--  round2()问题
老师好!,我偶然发现round2()函数结算结果不准确,例子如下:
output.show("四舍五入前:" & 3930*0.0045)
output.show("四舍五入后:" & round2(3930*0.0045,2))
得到的结果是:
四舍五入前:17.685
四舍五入后:17.68
round2()函数并没有严格四舍五入,请老师解答是什么问题?

--  作者:gsnake
--  发布时间:2013/1/22 0:03:00
--  
hehe,我顶
--  作者:lin_hailun
--  发布时间:2013/1/22 9:12:00
--  
 嗯嗯,测试确实有些错漏。看来需要重写。

 目前你可以先这样解决 output.show("四舍五入后:" & round2(3930*0.0045 + 0.0001, 2))
--  作者:狐狸爸爸
--  发布时间:2013/1/22 9:17:00
--  

收到


--  作者:e-png
--  发布时间:2013/1/22 9:21:00
--  
顶顶看
--  作者:maomaoxw
--  发布时间:2015/11/2 16:34:00
--  

我的自定义函数管用

\'四舍五入公式
Dim a As Decimal=args(0)\'数据原始值
Dim b As Decimal=args(1)\'保留小数位数
Dim c As Decimal \'返回值
If int(a*10^(b+1)) Mod 10<5 Then
    c=(int(a*10^(b+1))-int(a*10^(b+1)) Mod 10)*10^-(b+1)
Else
    c=(int(a*10^(b+1))+10-int(a*10^(b+1)) Mod 10)*10^-(b+1)
End If
Return c


--  作者:bahamute
--  发布时间:2015/11/2 16:43:00
--  
这个问题2016版还存在不?
--  作者:大红袍
--  发布时间:2015/11/2 16:45:00
--  

用format,就是严格的四舍五入。

 

比如 msgbox(format(17.685, "0.00"))