Foxtable(狐表)用户栏目专家坐堂 → 四舍五入遇到的怪现象,是不是偶然的?


  共有3193人关注过本帖树形打印复制链接

主题:四舍五入遇到的怪现象,是不是偶然的?

帅哥哟,离线,有人找我吗?
zhangchi96
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:550 积分:4985 威望:0 精华:0 注册:2012/2/11 13:27:00
四舍五入遇到的怪现象,是不是偶然的?  发帖心情 Post By: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

 

    请指教一下,这是什么原因呢,怎么也想不明白?


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/12/16 15:00:00 [只看该作者]

 不要用Round2,直接用Format

 

Format(17.185, "#.00")


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2014/12/16 15:24:00 [只看该作者]

楼主是老版本把?

我测试:

round2( 17.185 ,2)

得到的是17.19


 回到顶部
帅哥哟,离线,有人找我吗?
zhangchi96
  4楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:550 积分:4985 威望:0 精华:0 注册:2012/2/11 13:27:00
  发帖心情 Post By:2014/12/17 8:15:00 [只看该作者]

嗯,是的,用2014-10-22的版本就没这个问题了,老版本怎么就出这个问题了呢?


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/12/17 9:09:00 [只看该作者]

以下是引用zhangchi96在2014-12-17 8:15:00的发言:

嗯,是的,用2014-10-22的版本就没这个问题了,老版本怎么就出这个问题了呢?

 

bug


 回到顶部
帅哥哟,离线,有人找我吗?
程兴刚
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:7235 积分:40550 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2014/12/17 9:14:00 [只看该作者]

楼主,其实您这个才更符合国际惯例,“4舍6入5看单”,当舍取位为5时,则看前一位,单入双舍,这样的取舍才能使整个帐面比我国习惯的4舍5入更平衡!

 回到顶部
帅哥哟,离线,有人找我吗?
zhangchi96
  7楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:550 积分:4985 威望:0 精华:0 注册:2012/2/11 13:27:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/12/17 14:18:00 [只看该作者]

round2原先有bug的,新版已经修正。

 

用format可以正常。


 回到顶部