以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 四舍五入遇到的怪现象,是不是偶然的? (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=61642) |
-- 作者:zhangchi96 -- 发布时间:2014/12/16 14:57:00 -- 四舍五入遇到的怪现象,是不是偶然的? 在窗体中添加了按钮控件,代码:
Dim 失保比例 As Double 失保比例 = 0.005 Dim 小数位数 As Double 小数位数 = 2 With DataTables("教职工信息表") Dim 岗位工资 As Double Dim 薪级工资 As Double For Each dr As DataRow In DataTables("教职工信息表").DataRows 岗位工资 = dr("岗位工资_标准") 薪级工资 = dr("薪级工资_标准") dr("缴失保") = round2( 失保比例 * math.Max(2299,岗位工资+薪级工资+dr("教龄津贴")+dr("岗位津贴")) ,小数位数) Next End With
当其中的 岗位工资+薪级工资+dr("教龄津贴")+dr("岗位津贴") 计算结果是3437时,3437*0.005=17.185,近似值为17.19,但显示结果却为17.18
实验时发现,计算结果为下列数时,取得的近似值如下 3457*0.005=17.285 ,显示17.29 3477*0.005=17.385 ,显示17.39 3497*0.005=17.485 ,显示17.49 唯一错误的是: 3437*0.005=17.185 ,显示17.18 后来我把公式 dr("缴失保") = round2( 失保比例 * math.Max(2299,岗位工资+薪级工资+dr("教龄津贴")+dr("岗位津贴")) ,小数位数)
直接改成: dr("缴失保") = round2( 17.185 ,2) ,结果还是返回17.18
请指教一下,这是什么原因呢,怎么也想不明白? |
-- 作者:有点甜 -- 发布时间:2014/12/16 15:00:00 -- 不要用Round2,直接用Format
Format(17.185, "#.00") |
-- 作者:狐狸爸爸 -- 发布时间:2014/12/16 15:24:00 -- 楼主是老版本把? 我测试: round2( 17.185 ,2) 得到的是17.19 |
-- 作者:zhangchi96 -- 发布时间:2014/12/17 8:15:00 -- 嗯,是的,用2014-10-22的版本就没这个问题了,老版本怎么就出这个问题了呢? |
-- 作者:有点甜 -- 发布时间:2014/12/17 9:09:00 -- 以下是引用zhangchi96在2014-12-17 8:15:00的发言:
嗯,是的,用2014-10-22的版本就没这个问题了,老版本怎么就出这个问题了呢?
bug |
-- 作者:程兴刚 -- 发布时间:2014/12/17 9:14:00 -- 楼主,其实您这个才更符合国际惯例,“4舍6入5看单”,当舍取位为5时,则看前一位,单入双舍,这样的取舍才能使整个帐面比我国习惯的4舍5入更平衡! |
-- 作者:zhangchi96 -- 发布时间:2014/12/17 12:52:00 -- 是的,从概率来说,0.5算作1的概率是50%更科学,“4舍6入5看单”如果引用到小学课本的话可能难了点,大多人的思维定势不喜欢这样的。 不过round2和round不一样啊,round2(17.285,2)=17.28,这个BUG也太蹊跷了,除了17.285,测试过还有这个问题的其他数字吗?我的这个数字算不算一个重要的发现呢! [此贴子已经被作者于2014-12-17 12:52:33编辑过]
|
-- 作者:有点甜 -- 发布时间:2014/12/17 14:18:00 -- round2原先有bug的,新版已经修正。
用format可以正常。 |