Foxtable(狐表)用户栏目专家坐堂 → 关于四舍五入


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

主题:关于四舍五入

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


加好友 发短信
等级:小狐 帖子:337 积分:3225 威望:0 精华:0 注册:2020/2/25 23:12:00
关于四舍五入  发帖心情 Post By:2021/8/10 15:21:00 [只看该作者]

有一个单元格数据为6.995,用setformat保留2位 显示为7.00,又把这个单元格用round2保留2位,数值变为6.99了,不应该为7.00吗?

 

 


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


加好友 发短信
等级:超级版主 帖子:111455 积分:567357 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/8/10 15:33:00 [只看该作者]

setformat只是影响显示的效果,不会更改后台的数据

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


加好友 发短信
等级:小狐 帖子:337 积分:3225 威望:0 精华:0 注册:2020/2/25 23:12:00
  发帖心情 Post By:2021/8/10 22:07:00 [只看该作者]

这可能是个BUG,我又专门测试了下

表A和B,有编码和价格两个列


表B的 datacolchanged 代码 如下,在表A和表B,录入一行一样的编码,在表B价格列输入6.995,表A的价格列值为6.99,四舍五不入。



Dim Filter As String = "[编码] = '" & e.DataRow("编码") & "'"
    Dim drs As List(Of DataRow) = DataTables("表A").Select(Filter)
    For Each dr As DataRow In drs
        dr("价格") = round2( e.DataRow("价格"),2)
Next


[此贴子已经被作者于2021/8/10 22:16:30编辑过]

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


加好友 发短信
等级:超级版主 帖子:111455 积分:567357 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/8/10 22:25:00 [只看该作者]


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


加好友 发短信
等级:小狐 帖子:337 积分:3225 威望:0 精华:0 注册:2020/2/25 23:12:00
  发帖心情 Post By:2021/8/10 23:01:00 [只看该作者]

这一块完全不懂

s=iif(val(Cstr(Math.Floor(val(s))).PadLeft(1-w,"0").Chars(Cstr(Math.Floor(val(s))).PadLeft(1-w,"0").Length+w))>4,

这行代码报错,放到内部函数时,提示应为表达式

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


加好友 发短信
等级:超级版主 帖子:111455 积分:567357 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/8/10 23:12:00 [只看该作者]

这是一行代码,不要换行,应该是发帖的时候没有处理好

s=iif(val(Cstr(Math.Floor(val(s))).PadLeft(1-w,"0").Chars(Cstr(Math.Floor(val(s))).PadLeft(1-w,"0").Length+w))>4,Cstr(val(left(Cstr(Math.Floor(val(s))).PadLeft(1-w,"0"),Cstr(Math.Floor(val(s))).PadLeft(1-w,"0").Length+w) & left(l,-w))+val(l.Insert(100+w,"1"))),left(Cstr(Math.Floor(val(s))).PadLeft(1-w,"0"),Cstr(Math.Floor(val(s))).PadLeft(1-w,"0").Length+w) & left(l,-w))

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


加好友 发短信
等级:小狐 帖子:337 积分:3225 威望:0 精华:0 注册:2020/2/25 23:12:00
  发帖心情 Post By:2021/8/11 8:00:00 [只看该作者]

关于 round2

 

我又用以下代码测试,结果又不一样了

 

Dim a As Double

a= round2(6.995,2)

messagebox.show(a)

 

 

这个代码结果 =7,上个我发的代码结果是6.99


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


加好友 发短信
等级:超级版主 帖子:111455 积分:567357 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/8/11 8:45:00 [只看该作者]

对于位数很多的近似数,当有效位数确定后,其后面多余的数字应该舍去,只保留有效数字最末一位,这种修约(舍入)规则是“四舍六入五成双”,也即“4舍6入5凑偶”,这里“四”是指≤4 时舍去,"六"是指≥6时进上,"五"指的是根据5后面的数字来定,当5后有数时,舍5入1;当5后无有效数字时,需要分两种情况来讲:
(1)5前为奇数,舍5入1;
(2)5前为偶数,舍5不进(0是偶数)。

 回到顶部