以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 关于四舍五入 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=170886) |
-- 作者:wangglby -- 发布时间:2021/8/10 15:21:00 -- 关于四舍五入 有一个单元格数据为6.995,用setformat保留2位 显示为7.00,又把这个单元格用round2保留2位,数值变为6.99了,不应该为7.00吗?
|
-- 作者:有点蓝 -- 发布时间:2021/8/10 15:33:00 -- setformat只是影响显示的效果,不会更改后台的数据 |
-- 作者:wangglby -- 发布时间: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编辑过]
|
-- 作者:有点蓝 -- 发布时间:2021/8/10 22:25:00 -- 不是bug,这种属于四舍六入五成双:https://www.baidu.com/baidu?ie=UTF-8&word=%E5%9B%9B%E8%88%8D%E5%85%AD%E5%85%A5%E4%BA%94%E6%88%90%E5%8F%8C |
-- 作者:wangglby -- 发布时间: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, 这行代码报错,放到内部函数时,提示应为表达式
|
-- 作者:有点蓝 -- 发布时间: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 -- 发布时间:2021/8/11 8:00:00 -- 关于 round2
我又用以下代码测试,结果又不一样了
Dim a As Double a= round2(6.995,2) messagebox.show(a)
这个代码结果 =7,上个我发的代码结果是6.99 |
-- 作者:有点蓝 -- 发布时间:2021/8/11 8:45:00 -- 对于位数很多的近似数,当有效位数确定后,其后面多余的数字应该舍去,只保留有效数字最末一位,这种修约(舍入)规则是“四舍六入五成双”,也即“4舍6入5凑偶”,这里“四”是指≤4 时舍去,"六"是指≥6时进上,"五"指的是根据5后面的数字来定,当5后有数时,舍5入1;当5后无有效数字时,需要分两种情况来讲: (1)5前为奇数,舍5入1; (2)5前为偶数,舍5不进(0是偶数)。
|