Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2994|回复: 3

[已解决]公式有何问题(四舍六入五单双数值修约)

[复制链接]
发表于 2017-10-22 18:22 | 显示全部楼层 |阅读模式
本帖最后由 kuaile8513 于 2017-10-22 19:50 编辑

修约值8.005,修约到小数点两位,为什么不是8,而是8,01.(四舍六入五单双修约)详见附件。
A2为修约值(8.005) , B2为修约位数(2)。 公式:=IF(MOD(A2*10^(B2+1),20)=5,ROUNDDOWN(A2,B2),ROUND(A2,B2)),此式却返回8.01。
MOD(A2*10^(B2+1),20)返回的是5,则应是:ROUNDDOWN(A2,B2)=8,为什么会是ROUND(A2,B2))=8.01呢? 如果A2为9.005,则公式正确返回9.求助大神看一看,问题出在哪里?不胜感激。


最佳答案
2017-10-22 21:02
=IF(ABS(MOD(A2*10^(B2+1),20)-5)<0.00000001,ROUNDDOWN(A2,B2),ROUND(A2,B2))
这样吧,余数与5的差的绝对值与0.000000001之类的比较,就避免了浮点问题。

工作簿1.rar

7.97 KB, 下载次数: 14

发表于 2017-10-22 21:02 | 显示全部楼层    本楼为最佳答案   
=IF(ABS(MOD(A2*10^(B2+1),20)-5)<0.00000001,ROUNDDOWN(A2,B2),ROUND(A2,B2))
这样吧,余数与5的差的绝对值与0.000000001之类的比较,就避免了浮点问题。
回复

使用道具 举报

发表于 2017-10-22 23:21 | 显示全部楼层
觉得 把8.005 化成 8005 修约后再 除1000 更容易把握些

因 如果数据 不是8.005 , 而是 通过计算的到的值 比如 8.00499 , 就难以判断了
回复

使用道具 举报

发表于 2017-10-23 08:35 | 显示全部楼层
学习一下,尽管不理解,先收藏
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-3-29 15:39 , Processed in 1.179981 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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