V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
voids
V2EX  ›  程序员

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

  •  
  •   voids ·
    ShawnVoid · 2020-07-28 19:41:49 +08:00 · 2836 次点击
    这是一个创建于 1586 天前的主题,其中的信息可能已经有所发展或是发生改变。
    这个是 bug 吗☹
    ![image.png]( https://i.loli.net/2020/07/28/NGTs9avRL1dm4SB.png)
    第 1 条附言  ·  2020-07-29 08:43:35 +08:00

    123.gif

    19 条回复    2020-07-29 10:56:14 +08:00
    domosekai
        1
    domosekai  
       2020-07-28 19:53:31 +08:00 via Android
    浮点运算精度问题,都这样的
    across
        2
    across  
       2020-07-28 19:56:04 +08:00
    这个不止浮点了吧,excel 里面是 decimal ?
    zsdroid
        3
    zsdroid  
       2020-07-28 20:50:32 +08:00
    WPS 未复现
    iamsad3508
        4
    iamsad3508  
       2020-07-28 21:01:16 +08:00
    office365 也没有问题,你应该验证一下公式有没有输错
    realpg
        5
    realpg  
       2020-07-28 21:04:57 +08:00   ❤️ 1
    到底是 D 还是 B

    然后你的原始数据是 2345 行
    你这里 4567 是啥
    humansjl
        6
    humansjl  
       2020-07-29 00:02:14 +08:00
    贴的什么图
    voids
        7
    voids  
    OP
       2020-07-29 08:34:54 +08:00
    不好意思,贴图有点问题,录了一个 gif..
    ![123.gif]( https://i.loli.net/2020/07/29/7ly1D8TXwQYaqbF.gif)
    HeyWeGo
        8
    HeyWeGo  
       2020-07-29 08:52:26 +08:00
    jnmsn8806
        9
    jnmsn8806  
       2020-07-29 08:58:09 +08:00
    @voids ,数据格式是不是有问题?
    voids
        10
    voids  
    OP
       2020-07-29 09:00:10 +08:00
    @jnmsn8806 都是常规格式,来源是 Round 函数取两位的结果。
    Counter
        11
    Counter  
       2020-07-29 09:17:11 +08:00
    office 365 未复现,均为 0
    jnmsn8806
        12
    jnmsn8806  
       2020-07-29 09:19:42 +08:00
    @voids,看不出来你的问题出在哪里。我电脑上也是 OFFICE365,一切正常。
    yiXu
        13
    yiXu  
       2020-07-29 09:34:32 +08:00
    Office 365 未复现问题
    voids
        14
    voids  
    OP
       2020-07-29 09:41:53 +08:00
    @Counter @HeyWeGo @iamsad3508 @yiXu 谢谢楼上的几位,如果可以的话,请看下源数据,我换了几次电脑还是有这个问题..
    链接: https://pan.baidu.com/s/1FdUy7VFEEXgkl6dzm8ho2A 提取码: ebig
    yiXu
        15
    yiXu  
       2020-07-29 09:51:01 +08:00
    你这个源数据,没怎么看懂,建议给出你 gif 使用的示例文档
    yiXu
        16
    yiXu  
       2020-07-29 09:57:20 +08:00   ❤️ 1
    yiXu
        17
    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
        18
    voids  
    OP
       2020-07-29 10:23:17 +08:00
    @yiXu 67 行的计算结果有三个不为零(蓝色填充的单元格)的情况,而且如果把最后一个加法运算移动到前面计算(比如将 F67 的公式改为:=F54+F53-F55-F57-F59-F60-F61-F62-F63 ),结果就又是零了。
    yiXu
        19
    yiXu  
       2020-07-29 10:56:14 +08:00   ❤️ 1
    @voids 我测试了多种数据格式的情况,发现如下不规律现象:

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

    个人结论:
    1. 该问题可能是缓存问题,office 有一定优化,但可能无法快速反应。
    2. 中间过程的 round 函数,可以将中间结果显示为相应精度。
    3. 但个人怀疑后续计算会使用公式函数加入计算,造成 round 函数无法限制最后的精度。
    4. 建议仅使用 round 函数,在最后一步计算使结果符合相关的精度要求。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2600 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 06:19 · PVG 14:19 · LAX 22:19 · JFK 01:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.