惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

W
WeLiveSecurity
The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
Microsoft Azure Blog
Microsoft Azure Blog
The Register - Security
The Register - Security
Stack Overflow Blog
Stack Overflow Blog
博客园 - 三生石上(FineUI控件)
T
Threat Research - Cisco Blogs
S
SegmentFault 最新的问题
V2EX - 技术
V2EX - 技术
Hacker News: Ask HN
Hacker News: Ask HN
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
P
Proofpoint News Feed
J
Java Code Geeks
Microsoft Security Blog
Microsoft Security Blog
M
MIT News - Artificial intelligence
AI
AI
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
P
Proofpoint News Feed
Hacker News - Newest:
Hacker News - Newest: "LLM"
B
Blog
N
News and Events Feed by Topic
N
News | PayPal Newsroom
Google DeepMind News
Google DeepMind News
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
WordPress大学
WordPress大学
C
Cybersecurity and Infrastructure Security Agency CISA
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 【当耐特】
U
Unit 42
腾讯CDC
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Cloudflare Blog
H
Help Net Security
Recent Announcements
Recent Announcements
P
Privacy & Cybersecurity Law Blog
IT之家
IT之家
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Security Archives - TechRepublic
Security Archives - TechRepublic
L
LINUX DO - 热门话题
Martin Fowler
Martin Fowler
MongoDB | Blog
MongoDB | Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
H
Heimdal Security Blog
博客园 - 聂微东
S
Securelist
大猫的无限游戏
大猫的无限游戏
Cloudbric
Cloudbric
Cisco Talos Blog
Cisco Talos Blog

Excel

请教一下大家,如果有几万行数据和几万张图片需要处理和浏览,有什么能替代 excel 的方案吗? 有哪位 excel 大神知道,如何在 excel 中对单元格内的多行文本内容进行逐行编号 - V2EX 如何计算不同列金流的 XIRR? - V2EX 单元格内数据去重 纯分享 解决工作难题 - V2EX 我有个数据分析的需求,全都是带公式的 EXCEL excel 类型的数据转换成什么来处理好? MacOS VBA 总是出现“宏被禁止或不可用”的提示。 ms excel 中的 Internet Explorer 被禁用该怎么解决,求助 Excel 自带函数连 Map, Reduce 都有了 Excel“名称管理器”定义了很多名称,现在全部删除掉,但是公式引用了很多自定义名称 - V2EX 多个 Excel 文件和 word 文件如何批量替换? excel 一点击超链接就卡死 怎么解决 - V2EX excel 一个单元格能存多少字节的数据呢 有没有 Excel 编程相关的站点或经验? - V2EX 所以 2019 版安全模式的窗口外加 2013 的透视表就是新一代 UI? 飞书的 excel 的共享文档,如何复制下来? Office365 的 Excel 居然有专属函数。。。一般版本用不了 请教 Excel 数据量大的时候 XLOOKUP 和 INDEX&MATCH 哪个更省资源? excel 一次只能显示 2 行表格内容,鼠标滚轮一次滚 3 行内容,有解决方案吗? 两个 EXCEL 表格怎么合并数据 excel 滚动可以按像素滚动吗? 微软新推出的`XLOOKUP`真的好用! - V2EX 一种 EXCEL(结构化数据)导入 SQLite 统计方法的实践分享 - V2EX Excel 两表比对功能求助 [求助] 一个关于 Excel 的统计问题 求助: excel 中如何实现选中一个单元格后立即粘贴剪切板内容 excel 如何批量拖拽 求教一个 EXCEL 问题:如何在 excel 中可以实现根据单元格(cell)中的关键字匹配对应的关键字 - V2EX
遇到一个头疼的 Excel 精度问题
messiah163 · 2025-02-08 · via Excel

这是一个创建于 490 天前的主题,其中的信息可能已经有所发展或是发生改变。

今天在处理 Excel 文件时发现了一个有趣的现象。看下面两张图:

  1. Excel 界面显示的数据:
A 列 B 列
4239.26 224789.77
4239.26 220550.51
128753.34 91797.17
90000 1797.17
1797.17 -1.63709E-11
4239.26 224789.77
4239.26 220550.51
128753.34 91797.17
91797.17 0

如图 1: [pEmUrzq.png](图 1:减出来不等于 0)

如图 2: [pEmUyQ0.png](图 2:减出来等于 0 了)

  1. 但当我查看这个 Excel 文件的 XML 源码时:
	<row r="2" spans="1:2" ht="18"><c r="A2" s="1"><v>4239.26</v></c><c r="B2" s="1"><v>224789.77</v></c></row>
	<row r="3" spans="1:2" ht="18"><c r="A3" s="1"><v>4239.26</v></c><c r="B3" s="1"><f>B2-A3</f><v>220550.50999999998</v></c></row>
	<row r="4" spans="1:2" ht="18"><c r="A4" s="1"><v>128753.34</v></c><c r="B4" s="1"><f>B3-A4</f><v>91797.169999999984</v></c></row>
	<row r="5" spans="1:2" ht="18"><c r="A5" s="1"><v>90000</v></c><c r="B5" s="1"><f>B4-A5</f><v>1797.1699999999837</v></c></row>
	<row r="6" spans="1:2" ht="18"><c r="A6" s="1"><v>1797.17</v></c><c r="B6" s="1"><f t="shared" ref="B6" si="0">B5-A6</f><v>-1.6370904631912708E-11</v></c></row>
	<row r="7" spans="1:2" ht="18"><c r="A7" s="1"/><c r="B7" s="1"/></row>
	<row r="8" spans="1:2" ht="18"><c r="A8" s="1"/><c r="B8" s="1"/></row>
	<row r="9" spans="1:2" ht="18"><c r="A9" s="1"><v>4239.26</v></c><c r="B9" s="1"><v>224789.77</v></c></row>
	<row r="10" spans="1:2" ht="18"><c r="A10" s="1"><v>4239.26</v></c><c r="B10" s="1"><f>B9-A10</f><v>220550.50999999998</v></c></row>
	<row r="11" spans="1:2" ht="18"><c r="A11" s="1"><v>128753.34</v></c><c r="B11" s="1"><f>B10-A11</f><v>91797.169999999984</v></c></row>
	<row r="12" spans="1:2" ht="18"><c r="A12" s="1"><v>91797.17</v></c><c r="B12" s="1"><f>B11-A12</f><v>0</v></c></row>
	<row r="13" spans="1:2" ht="18"><c r="A13" s="1"/><c r="B13" s="1"/></row>
	<row r="14" spans="1:2" ht="18"><c r="A14" s="1"/><c r="B14" s="1"/></row>
	<row r="15" spans="1:2" ht="18"><c r="A15" s="1"/><c r="B15" s="1"/></row>
	<row r="16" spans="1:2" ht="18"><c r="A16" s="1"/><c r="B16" s="1"/></row>

如图 3: [pEmaplt.png](图 3 、xml 细节)

问题在于:

  1. Excel 界面上显示的数值看起来很"干净",但 XML 中却带着一串额外的小数位
  2. 特别是 91797.17 这个数,在 XML 中实际是 91797.169999999984
  3. 最后的-1.63709E-11 ,在 XML 中是更精确的-1.6370904631012788E-11

这引发了几个问题:

  1. Excel 为什么要在 XML 中保存这么高的精度?
  2. 这些额外的精度是从哪里来的?是计算过程中产生的?
  3. 为什么界面显示和 XML 存储的精度不一致?
  4. 这种精度差异会在实际应用中造成什么影响?

欢迎各位大佬一起讨论。我个人猜测这可能跟 Excel 内部的数值表示方式有关,但具体细节还请懂行的来解释下。 Excel 文件: 文件链接: https://file.uhsea.com/2502/a971d24a402a2e08fd5873d3b0788ae925.xlsx

Rickkkkkkk

1

Rickkkkkkk      2025 年 2 月 8 日

原因是,数字都是二进制存储,而十进制下有限的小数到了二进制下可能是无限循环的。

解法是:如果是钱,最好是用整数(分)来做加减乘除

jr55475f112iz2tu

2

jr55475f112iz2tu      2025 年 2 月 8 日

我觉得你需要先告诉大家,这份 excel 是怎么得来的

如果它是某个软件/线上环境输出的结果,那可能原因需要从那个软件/线上环境去找,而不是从 excel 找
如果是其他场景,再分析

RobertLyu

3

RobertLyu      2025 年 2 月 8 日 via iPhone

我当时做工资表,就是两个人差一分钱,但是求和还对得上。直接 =ROUND() 函数。

后来发现这个函数也不够用,因为是 0.5 5 循环,就很麻烦,所以就手动把数字输进去了。

tool2dx

4

tool2dx      2025 年 2 月 8 日

“在 XML 中实际是 91797.169999999984”

你如果写代码,会发现程序里铺天盖地都是这种浮点数表示法。

我一般保存时,都会处理成 91797.1699999999 + 0.0000000001 (基于 double 精度表示),这样一处理,小数点后面都是 0 了。

hunterster

5

hunterster      2025 年 2 月 8 日

这种情况下是否可以保存为字符串形式?

messiah163

8

messiah163      2025 年 2 月 8 日

@RobertLyu 对,这个问题确实可以通过 round 掩饰过去,但是原因还是不清楚,我们打大部分表格都是正常的(应该是除了这份,其他目前都没有出现精度误差),我想这个肯定是有啥特别的原因导致的,说数字都是二进制存储,那别的正常精度的都是这么存储的,为啥一直是正常的,所以我比较困惑

tool2dx

11

tool2dx      2025 年 2 月 8 日

@messiah163 你在 v2 上面搜"浮点精度",不是你一个人遇到,很多人都遇到过。

解决方案只能是 excel 保存时处理,你说 xml 大部分情况不会触发,这只是和浮点计算有关系。用代码计算的话,乘除很容易就会触发了。

excel 设计初衷应该不是单纯计算金额,对中间计算步骤的把控,没那么严格。

messiah163

13

messiah163      2025 年 2 月 10 日

@tool2dx 你可以把手头任意一个 excel 拆包,看看里面的数字,大部分都是正常的没有出现浮点(...99999 或...000001 这种),我发这个贴文是想知道为啥会触发这个浮点数,目前看下来大部分 Excel 都是正常的没有出现浮点问题。这个异常的原因还是没有定位到
拆包方法是,将 Excel 的后缀名.xlsx 改成 zip ,然后解压缩,找到 xl 目录下的 worksheets 目录里面会有具体的 sheet 的 xml 文件,这个就是 Excel 数据存储的文件

tool2dx

14

tool2dx      2025 年 2 月 10 日   ❤️ 1

@messiah163 我试了一下,很容易就复现了。

<Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="3" x:FullColumns="1"
x:FullRows="1" ss:DefaultColumnWidth="52.8"
ss:DefaultRowHeight="15.600000000000001">

messiah163

15

messiah163      2025 年 2 月 10 日

说明下:
1 、Excel 的拆包方法是,将 Excel 的后缀名.xlsx 改成 zip ,然后解压缩,找到 xl 目录下的 worksheets 目录里面会有具体的 sheet 的 xml 文件,这个就是 Excel 数据存储的文件
2 、OP 发这个贴的问题主要是希望能探究下这个数字变成浮点的原因,round 可以让结果看上去没问题,但是实际上只是掩盖了这个问题,能解决是有效的,但是绕开了发生的原因,我的目的是探究出现问题的原因
3 、OP 的数字是手动输入的,只有加减 B1-A2 后面都是直接拖拽填充的,没有乘除法运算
A 列
4239.26
4239.26
128753.34
91234.56
562.61

B 列第一个单元格 224789.77
第二个单元格=B1-A2 后面都是直接拖拽填充的

messiah163

16

messiah163      2025 年 2 月 10 日

@tool2dx 感谢答复,你这个是 excel 拆包的文件吗?我咋看着不像啊?大佬方便的话:VX 可以交流下 im_zmx