round公式避免浮点误差

wils
wils Lv.2 潜力创作者

Lv.2潜力创作者

曾经发帖讨论过round的浮点精度的问题

https://bbs.wps.cn/topic/31968

以前用多套一层round的办法,其实是有问题的

为了解决5结尾时的精度,反倒先要round一次浪费了精度


下面的方法是某大佬解决宏里round精度问题的方法,我找不到帖子了,这里只是分享出来

🔔

=ROUND(TEXT(1-0.9975,"0.##############"),3)

其实就是套一层TEXT公式,好处是正确消除了浮点误差


恰同学少年大佬的研究表明,上面的方法也不保险

那么还是得用js库做十进制运算或者调用bc才行


在大佬的提醒下,终于发现套一层TEXT这个公式有个限制,就是井号的个数不能超过精度,如果是1-0.91785可以用15个井号,1000-999.91785只能用13个井号

现在的想法是,别太长,超过你需要的精度长度10来个井号

而且幸好它不是四舍五入,如果是精确的1.149999999999这个数取1位,它并不会进位,算是是好事

海南省
浏览 201
1
7
分享
7 +1
19
1 +1
全部评论 19
 
恰同学少年
=ROUND(TEXT(1-0.91785,"0.################"),4) =>0.0821 四舍五入结果也不对
· 黑龙江省
1
回复
wils
wilsLv.2 潜力创作者

Lv.2潜力创作者

确实,看来这个也不保险。。。
· 海南省
回复
 
麻辣君
感谢分享
· 云南省
回复
 
Yang✌🏻
咦。。。好像被发现了。
· 河南省
回复
wils
wilsLv.2 潜力创作者

Lv.2潜力创作者

👍
· 海南省
回复