金山excel计算bug

我不理解我2位的小数加减法,是怎么得到0.000000000149这个离谱的计算结果的

A

B

C

D

E

F

A+B-C

E-D

5018301.86

5016135.29

10011885.56

22551.59

22551.59

0.00000000014915713109076

江苏省
浏览 1126
收藏
3
分享
3 +1
22
+1
全部评论 22
 
无十三
学习了
· 四川省
回复
 
厚积、薄发
学习
· 山东省
回复
 
wils
wils

创作者俱乐部成员

如图,这个round没有问题,执行的是四舍六入五成双的规则 但是,从公式输入的数字总是双精度浮点,就像例子里的前三行,1.015被当成了1.014999999,并没有执行五成双这个规则,而是四舍了。。。 只有在宏里转类型为dec数字,才能看出round函数实际工作是正常的,但如果你给round提供浮点数,就像公式里,那这个round总是不正常的。。。 简直没眼看
· 海南省
回复
wils
wils

创作者俱乐部成员

这里说的也不全对,公式里的round是另一个情况,反正我是放弃了,现在的态度确实是round挺好,就这样吧。。。
· 海南省
回复
 
wils
wils

创作者俱乐部成员

round不能解决问题,只是掩盖问题,尤其是遇到四舍六入五成双时,必须用宏来写。。。
· 广东省
1
回复
拾光漫行
拾光漫行

WPS函数专家

没明白什么叫掩盖问题??我比较少遇到那个成双的。。其实我大多数是roundup 直接进位
· 重庆
1
回复
 
拾光漫行
拾光漫行

WPS函数专家

浮点误差 ,根本原因是二进制和十进制互换的时候出现的问题 解决方法网上很多的。比如用round等方法
· 重庆
1
回复
马成功老师
马成功老师

创作者俱乐部成员

回复的好专业,受益匪浅。
· 北京
回复
 
wils
wils

创作者俱乐部成员

表格里是64位双精度浮点数,1位符号11位指数52位尾数,显然无法表示他所声称的那个范围的所有数,这东西一直是不精确的。。。
· 广东省
1
回复
马铃薯
了解!感谢
· 江苏省
回复
 
wils
wils

创作者俱乐部成员

......
· 海南省
1
回复
 
wils
wils

创作者俱乐部成员

如图,py里比较明显,12.05这个数字,如果用浮点数存储,是不精确的,要精确必须用decimal类型从字符串类型转换而来,数字才精确,excel wps也是这样,尤其是公式里的round,根本没眼看,很多年前就一直有老师说,这些软件想做金融方面的应用,必须用dec类型的数字来写,但平时用,所有常见工具的浮点数都是这样,所以round这个公式实际上十分复杂。。。
· 海南省
1
回复
马铃薯
我死了,这个标记堵得我好梗
· 江苏省
回复
 
马铃薯
试了用纯数字,离谱减法
· 江苏省
回复
 
wils
wils

创作者俱乐部成员

Excel、Python、js都有这个问题,所以才需要在vba里使用cdec类型的数字,js py里需要bignum decimal库,wps里可以用js库bignum或者直接用字符串做计算,公式里没有办法避免,无论Excel还是wps,几十年来都是这样
· 海南省
1
回复
 
马铃薯
把小数位全部增加,发现连D都是错误的
· 江苏省
回复
马成功老师
马成功老师

创作者俱乐部成员

什么工作或岗位需要小数后面这么精细的数据啊?
· 北京
回复