MICROSOFT

EP07. “Floating Point Errors 浮点数误差”

首页 Microsoft 工具 Excel · Functions · Formula Errors · EP07
约 4 分钟· #EP07#Excel#Formula Errors
🔒 登录后可标记已读
  • Excel 内部用浮点数(floating point)储存和计算数字
  • 有时候公式算出来的结果只是一个非常接近、但不完全精确的近似值
  • 肉眼看不出来,但拿去做比较(例如判断两个数字是否相等)时可能会出问题
  • 讲怎么发现这种误差、怎么用 ROUND 修正,以及一个显示层面的替代方案
  • 前置知识不多,学完能理解为什么有时候「看起来一样的两个数字」用公式比较却不相等

重点内容


适用版本

桌面版通用(Excel 365 / 2021 / 2019 等)。


什么是浮点数误差

Excel 会存储和计算浮点数,有时候公式的结果只是一个非常接近的近似值,不是完全精确的数字。


怎么发现浮点数误差

  1. 一般情况下直接看单元格,公式结果看起来完全正常
  2. 把该单元格的小数位数显示到 16 位(增加小数位数按钮一直点),会发现某些结果其实带着一长串看不出规律的极小尾数,代表这只是一个近似值

[截图:同一个单元格分别显示默认位数和展开到 16 位小数的对比,展开后露出误差尾数的样子]


浮点数误差可能造成的问题

把带有浮点数误差的单元格拿去跟另一个数字做等于比较(例如判断 C8 是否等于某个整数),因为 C8 实际上并不是「完全精确」的那个数字,比较结果可能是 FALSE,即使两者看起来应该相等。


两种解决方案怎么选

方案做法影响范围
ROUND 函数修正比较前先用 ROUND 去掉误差尾数只影响用到 ROUND 的那条公式
Precision as DisplayedFile → Options → Advanced 勾选「精度与显示位数一致」影响整份文件,要谨慎

解决方案一:用 ROUND 函数修正

在比较之前先用 ROUND 函数把数字四舍五入到指定小数位,去掉误差造成的极小尾数,让比较结果符合预期。


解决方案二:调整显示精度(Precision as Displayed)

File 标签 → Options → Advanced,勾选「Set precision as displayed」(精度与显示位数一致)这个选项,可以让 Excel 把数字强制精确到目前显示的小数位数,但这个设置会影响整份文件,改动前要谨慎。


学完你会

  • ✅ 能理解浮点数误差是什么、为什么「看起来一样」的数字比较会返回 FALSE
  • ✅ 能用 ROUND 函数在比较前修正浮点数误差
  • ✅ 知道「精度与显示位数一致」这个全局设置的影响范围,改动前要谨慎

常见错误

  • 拿两个「看起来相等」的公式结果直接用 = 判断相等,没考虑到浮点数误差可能导致比较失败
  • 遇到判断结果跟预期不符,第一时间怀疑公式逻辑写错,而不是先检查是不是浮点数误差
  • 随意开启「精度与显示位数一致」这个全局设置,没意识到它会永久改变整份文件里数字的精确度,无法还原

📌 补充说明

浮点数误差在实际使用中很少见,多数情况不需要特别担心,只有在做精确的等于比较时才需要留意。

Sources

Blog / Website:

  1. Floating Point Errors