ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 16578|回复: 24

“MOD”函数的应用---四舍六入

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-1-31 02:39 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
IF(MOD(INT(Q24*10),2)=0,IF(Q24*10-INT(Q24*10)=0.5,INT(Q24*10)/10,ROUND(Q24,1)),ROUND(Q24,1)),保留1位小数。Q24为未处理之前的数。经过验证,我认为是比较精炼的。请专家指教!

TA的精华主题

TA的得分主题

发表于 2009-1-31 08:03 | 显示全部楼层
原帖由 lwbtest 于 2009-1-31 02:39 发表
IF(MOD(INT(Q24*10),2)=0,IF(Q24*10-INT(Q24*10)=0.5,INT(Q24*10)/10,ROUND(Q24,1)),ROUND(Q24,1)),保留1位小数。Q24为未处理之前的数。经过验证,我认为是比较精炼的。请专家指教!

我觉得多此一举!
因为既满足第一个条件(MOD(INT(Q24*10),2)=0,即乘10并取整后为偶数)又满足第二个条件IF(Q24*10-INT(Q24*10)=0.5的机会本来就很少,所以,该公式基本上执行的是ROUND(Q24,1),即舍去指定小数位后的所有数字!
同时,我不明白楼主的四舍六入的意思!既然四舍六入,那么五又如何处理?按照你的公式,岂不是五也要当做四舍去吗?

TA的精华主题

TA的得分主题

发表于 2009-2-1 16:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
《Excel函数与公式实战技巧精粹》中关于“四舍六入五单双”技巧的公式为:
=ROUND($A2,2)-(MOD($A2*10^3,20)=5)/100
比楼主的简练多了吧,呵呵。
还可以用
=ROUND($A2,2)-(MOD($A2*10^3,20)=5)%

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-2-1 23:20 | 显示全部楼层
我是搞工程试验的,我们的数据都要经过4舍6入的处理,当然,大部分数据4舍5入都没有问题,试验报告要实行自动计算的话,就必须进行特殊判断(4舍6入)处理。数值修约规则与极限数值的表示和判定<GB/T 8170-2008>有规定。
意思是:一组数,如2.550、2.650、2.651保留1位小数,经过4舍6入等于2.6、2.6、2.7。
我的理解是:基于公平原则,1234小于5 的数舍去,6789大于5 的数入,这是公平的;那么5怎么办呢?还是基于公平原则——被收舍的数恰好等于5,即5后面没有尾巴,收舍的原则是看被收舍的数前面的数是奇数、还是偶数,奇进偶不进!

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-2-1 23:54 | 显示全部楼层
保留n位小数的通用公式:IF(MOD(INT(A2*10^n),2)=0,IF(A2*10^n-INT(A2*10^n)=0.5,INT(A2*10^n)/10^n,ROUND(A2,n)),ROUND(A2,n))。
版主的这两个公式我没看的太懂,你能用一组数,如2.550、2.650、2.651保留1位小数,得到2.6、2.6、2.7的结果吗?

TA的精华主题

TA的得分主题

发表于 2009-2-4 22:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

回复 4楼 lwbtest 的帖子

我回复的是《Excel函数与公式实战技巧精粹》的技巧78的解法,示例:
1.525保留2位小数的话,因第2位小数为偶数,所以第3位的5舍,得到1.52;
1.535保留两位小数的话,因为第2位小数为奇数,所以第3位的5入,得1.54。
保留2位小数的公式=ROUND($A2,2)-(MOD($A2*10^3,20)=5)%——(仅适用于正数),其原理为:
首先对A2保留按round直接四舍五入,再将A2放大1000倍,比如:上面2个数四舍五入后得到1.53、1.54
1.525放大后为1525,MOD(1525,20)=5,因此(MOD(1525,20)=5)%=0.01,因而最后得到1.53-0.01=1.52,起到了奇进偶不进的作用。
1.535放大后为1535,MOD(1535,20)=15,因此(MOD(1535,20)=5)%=0,也就是没有舍弃,因而最后得到1.54;
假如有尾巴:1.5251,放大1000倍后为1525.1,MOD(1525.1,20)=5.1不等于5,也不会被舍弃。

同理:保留1位小数的解法
=ROUND($A2,1)-(MOD($A2*10,2)=0.5)/10——先四舍五入到1位小数,再将值放大10倍后对2求余数
比如:2.550四舍五入得2.6→放大10倍得25.50,MOD(25.50,2)=1.5,因此mod=0.5判断为FALSE→FALSE/10=0,即不舍弃。
2.650四舍五入得2.7→放大10倍得26.50,MOD(26.50,2)=0.5,因此mod=0.5判断为TRUE→TRUE/10=0.1,即最后得2.7-0.1=2.6。
2.651四舍五入得2.7→放大10倍得26.51,MOD(26.51,2)=0.51,因此mod=0.51判断为FALSE→不舍弃,即最后得2.7。

[ 本帖最后由 gouweicao78 于 2009-2-4 23:32 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-2-5 00:01 | 显示全部楼层
事实上,经过验证,不管是MOD还是INT函数,都被发现可能因为EXCEL浮点运算造成误差而导致判断失误,比如:=MOD(2.5565*10^4,20)最终得到的是5.00000000000364,而=MOD(25565,20)能得到5。
这些浮点运算误差是难以意料什么时候出现的,一般发生在小数位数较多和多个计算过程(个人感觉,规律尚不清楚),而TRUNC函数则未被发现有此误差,因此,精确的公式应该是,保留n位小数的四舍六入五单双的公式为:
  1. =ROUND(A2,n)-(TRUNC(A2,n+1)=A2)*(MOD(RIGHT(TRUNC(A2,n)),2)=0)/10^n
复制代码


即:用TRUNC(A2,n+1)=A2来判断是否还有尾巴,用MOD(RIGHT(TRUNC(A2,n)),2)来判断保留位数的小数奇偶性。

[ 本帖最后由 gouweicao78 于 2009-2-5 00:04 编辑 ]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-2-7 10:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
狗尾草版主:非常感谢你的耐心帮助、指导,首次见识了“(TRUNC(A2,n+1)=A2)*(MOD(RIGHT(TRUNC(A2,n)),2)=0”——利用逻辑运算来处理这个问题。当然我是个新新手,“少见多怪”了。还望狗尾草版主能帮我解决一下http://club.excelhome.net/thread-393552-1-1.html这个问题。谢谢了。

TA的精华主题

TA的得分主题

发表于 2009-2-13 16:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
惟一不能判定的是带0尾巴数的四舍六入。
如保留1位小数
2.650应得到2.7,
2.65得到2.6

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-2-13 20:45 | 显示全部楼层

回复9楼

国家标准《数值修约规则与极限数值的表示和判定》GB/T 8170-2008有规定——而不是其他什么人规定的。将2.650001;2.65000;保留1位小数,对应的应该得到2.7;2.6。我在4楼有解释,用5楼和7楼的公式可以得到这个结果。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-26 00:48 , Processed in 0.033883 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表