EP07. “Floating Point Errors 浮点数误差”
🔒 登录后可标记已读- Excel 内部用浮点数(floating point)储存和计算数字
- 有时候公式算出来的结果只是一个非常接近、但不完全精确的近似值
- 肉眼看不出来,但拿去做比较(例如判断两个数字是否相等)时可能会出问题
- 讲怎么发现这种误差、怎么用 ROUND 修正,以及一个显示层面的替代方案
- 前置知识不多,学完能理解为什么有时候「看起来一样的两个数字」用公式比较却不相等
重点内容
适用版本
桌面版通用(Excel 365 / 2021 / 2019 等)。
什么是浮点数误差
Excel 会存储和计算浮点数,有时候公式的结果只是一个非常接近的近似值,不是完全精确的数字。
怎么发现浮点数误差
- 一般情况下直接看单元格,公式结果看起来完全正常
- 把该单元格的小数位数显示到 16 位(增加小数位数按钮一直点),会发现某些结果其实带着一长串看不出规律的极小尾数,代表这只是一个近似值
[截图:同一个单元格分别显示默认位数和展开到 16 位小数的对比,展开后露出误差尾数的样子]
浮点数误差可能造成的问题
把带有浮点数误差的单元格拿去跟另一个数字做等于比较(例如判断 C8 是否等于某个整数),因为 C8 实际上并不是「完全精确」的那个数字,比较结果可能是 FALSE,即使两者看起来应该相等。
两种解决方案怎么选
| 方案 | 做法 | 影响范围 |
|---|---|---|
| ROUND 函数修正 | 比较前先用 ROUND 去掉误差尾数 | 只影响用到 ROUND 的那条公式 |
| Precision as Displayed | File → Options → Advanced 勾选「精度与显示位数一致」 | 影响整份文件,要谨慎 |
解决方案一:用 ROUND 函数修正
在比较之前先用 ROUND 函数把数字四舍五入到指定小数位,去掉误差造成的极小尾数,让比较结果符合预期。
解决方案二:调整显示精度(Precision as Displayed)
File 标签 → Options → Advanced,勾选「Set precision as displayed」(精度与显示位数一致)这个选项,可以让 Excel 把数字强制精确到目前显示的小数位数,但这个设置会影响整份文件,改动前要谨慎。
学完你会
- ✅ 能理解浮点数误差是什么、为什么「看起来一样」的数字比较会返回 FALSE
- ✅ 能用 ROUND 函数在比较前修正浮点数误差
- ✅ 知道「精度与显示位数一致」这个全局设置的影响范围,改动前要谨慎
常见错误
- 拿两个「看起来相等」的公式结果直接用
=判断相等,没考虑到浮点数误差可能导致比较失败 - 遇到判断结果跟预期不符,第一时间怀疑公式逻辑写错,而不是先检查是不是浮点数误差
- 随意开启「精度与显示位数一致」这个全局设置,没意识到它会永久改变整份文件里数字的精确度,无法还原
📌 补充说明
浮点数误差在实际使用中很少见,多数情况不需要特别担心,只有在做精确的等于比较时才需要留意。
Sources
Blog / Website: