解决浮点运算(ROUNDBANK)问题

wils
wils

创作者俱乐部成员

前面吐槽过round,https://bbs.wps.cn/topic/31968

大家也都知道是浮点运算导致的。。。

今天论坛里又有小伙伴问ROUNDBANK为什么不准确https://bbs.wps.cn/topic/46162

就想起原来用big.js解决十进制小数运算的问题,干脆重新定义加减乘除,以消除浮点运算的误差

试了一下,貌似可以,下面是操作:

  • 在宏编辑器里,文件->导入,这个big.js文件,不用管报错

  • 在宏编辑器里,工具->选项->编译,去掉两个禁止全局的选项

  • 然后在另一个模块里,自己重新定义加减乘除等常见运算

结果如图:

原来的公式是

=ROUNDBANK((5-4.6)/64,4)

结果是0.0063,因为在浮点运算时,5-4.6大于0.4

而bigjs模块,可以理解为,将数字当成字符串,然后按照十进制的算法进行运算,结果也可以是字符串,所以不存在浮点误差

图中就是通过自定义减法和除法,用于ROUNDBANK之后,得到了符合预期的结果

要不,wps官方提供几个基本的十进制运算函数也行哈

海南省
浏览 432
收藏
6
分享
6 +1
10
+1
全部评论 10
 
侯子强
· 广东省
回复
 
wils
wils

创作者俱乐部成员

其实仔细想想,先套一层round是不行的,损失的精度更多,还不如不套,遇到特殊情况的可能更小一点 比如1.149,直接roundbank取1位小数,肯定是1.1,但如果先round取2位,是1.5,再roundbank取1位就变成1.2了,确实,把round先取的位数弄大点,比如小数点后10位,可以减少概率,但其实治标不治本 还是希望官方能出几个基础十进制运算的函数,操作的参数都是字符串,而非浮点数,roundbank才算是完美
· 广东省
回复
胡萝卜炖小白兔
请问下,我现在用着没这问题,是怎么回事=ROUNDBANK((5-4.6)/64,4)我的结果是0.0062,我不太懂
· 辽宁省
回复
 
HC.旋
太厉害了
· 福建省
回复
 
EnterZero
EnterZero

创作者俱乐部成员

莫名觉厉啊
· 四川省
1
回复
wils
wils

创作者俱乐部成员

感谢捧场
· 海南省
回复