请教一下 Excel 里同一个公式计算顺序不一样,结果不同的问题

2020-07-28 19:41:49 +08:00
 voids
这个是 bug 吗☹
![image.png]( https://i.loli.net/2020/07/28/NGTs9avRL1dm4SB.png)
2659 次点击
所在节点    程序员
19 条回复
domosekai
2020-07-28 19:53:31 +08:00
浮点运算精度问题,都这样的
across
2020-07-28 19:56:04 +08:00
这个不止浮点了吧,excel 里面是 decimal ?
zsdroid
2020-07-28 20:50:32 +08:00
WPS 未复现
iamsad3508
2020-07-28 21:01:16 +08:00
office365 也没有问题,你应该验证一下公式有没有输错
realpg
2020-07-28 21:04:57 +08:00
到底是 D 还是 B

然后你的原始数据是 2345 行
你这里 4567 是啥
humansjl
2020-07-29 00:02:14 +08:00
贴的什么图
voids
2020-07-29 08:34:54 +08:00
不好意思,贴图有点问题,录了一个 gif..
![123.gif]( https://i.loli.net/2020/07/29/7ly1D8TXwQYaqbF.gif)
HeyWeGo
2020-07-29 08:52:26 +08:00
jnmsn8806
2020-07-29 08:58:09 +08:00
@voids ,数据格式是不是有问题?
voids
2020-07-29 09:00:10 +08:00
@jnmsn8806 都是常规格式,来源是 Round 函数取两位的结果。
Counter
2020-07-29 09:17:11 +08:00
office 365 未复现,均为 0
jnmsn8806
2020-07-29 09:19:42 +08:00
@voids,看不出来你的问题出在哪里。我电脑上也是 OFFICE365,一切正常。
yiXu
2020-07-29 09:34:32 +08:00
Office 365 未复现问题
voids
2020-07-29 09:41:53 +08:00
@Counter @HeyWeGo @iamsad3508 @yiXu 谢谢楼上的几位,如果可以的话,请看下源数据,我换了几次电脑还是有这个问题..
链接: https://pan.baidu.com/s/1FdUy7VFEEXgkl6dzm8ho2A 提取码: ebig
yiXu
2020-07-29 09:51:01 +08:00
你这个源数据,没怎么看懂,建议给出你 gif 使用的示例文档
yiXu
2020-07-29 09:57:20 +08:00
yiXu
2020-07-29 10:00:10 +08:00
该文章在最后指出:

“值达到零时的示例
在 Excel 95 或更早版本中,在新工作簿中输入以下内容:

A1: = 1.333 + 1.225-1.333-1.225

右键 clickcell A1,然后单击 "设置单元格格式"。 在 "数字" 选项卡上,单击 "类别" 下的 "科学 将小数位数设置为 15 。

Excel 95 显示 2.22044604925031 E-16,而不是显示 0 。

但是,Excel 97 引入了一种优化,尝试纠正此问题。 如果加法或减法运算结果的值为或接近零,Excel 97 和更高版本将补偿因将操作数转换为二进制而引入的任何错误。 上面的示例在 Excel 97 和更高版本中执行时,在科学记数法中正确显示 0 或 0.000000000000000 E + 00 。 ”
voids
2020-07-29 10:23:17 +08:00
@yiXu 67 行的计算结果有三个不为零(蓝色填充的单元格)的情况,而且如果把最后一个加法运算移动到前面计算(比如将 F67 的公式改为:=F54+F53-F55-F57-F59-F60-F61-F62-F63 ),结果就又是零了。
yiXu
2020-07-29 10:56:14 +08:00
@voids 我测试了多种数据格式的情况,发现如下不规律现象:

1. 需要被计算的单元格设置为数值,不使用公式。
2. 多次调换单元格属性:数值或者常规。
3. 多次尝试重新计算公式(将等于号删除确认,再加上重新计算)
4. 2,3 步骤多次实验,有时长时间无法使这个误差归零(多尝试可以),有时可以很快就归零。

个人结论:
1. 该问题可能是缓存问题,office 有一定优化,但可能无法快速反应。
2. 中间过程的 round 函数,可以将中间结果显示为相应精度。
3. 但个人怀疑后续计算会使用公式函数加入计算,造成 round 函数无法限制最后的精度。
4. 建议仅使用 round 函数,在最后一步计算使结果符合相关的精度要求。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/693843

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX