0.1 + 0.2 为什么不等于 0.3?答不上来的都挂了
这个问题你可能在面试、线上 Bug、甚至随手写 Demo 的时候都见过1console.log(0.1 0.2 0.3);// false很多人第一反应是“浮点数精度问题”但如果继续追问为什么偏偏是0.1、0.2这种小数出问题“精度”到底精在哪一位、丢在哪一步实际开发里应该怎么比较、怎么计算才稳这篇文章按“现象 → 原因 → 解决 → 面试回答”的顺序把它讲透。先看现象1234console.log(0.1 0.2);// 0.30000000000000004console.log(0.1 0.7);// 0.7999999999999999console.log(0.3 - 0.2);// 0.09999999999999998console.log(0.1 * 3);// 0.30000000000000004但有些计算又是对的123console.log(0.5 0.5);// 1console.log(0.25 0.25);// 0.5console.log(0.125 * 8);// 1为什么根本原因二进制无法精确表示某些十进制小数计算机用二进制存储数字。十进制的 0.5 在二进制里是 0.1能精确表示。但十进制的 0.1 在二进制里是10.0001100110011001100110011001100110011... (无限循环)就像十进制里 1/3 0.333... 无限循环一样0.1 在二进制里也是无限循环的。但计算机内存有限不能存无限长的数字必须在某个位置截断。JavaScript 用的是 IEEE 754 双精度浮点数只有 64 位其中 52 位用来存小数部分。截断就意味着误差。哪些数能精确表示能被 2 的幂次整除的小数在二进制里都能精确表示12345// 这些都是精确的0.5 1/2 0.1 (二进制)0.25 1/4 0.01 (二进制)0.125 1/8 0.001 (二进制)0.0625 1/16 0.0001 (二进制)而 0.1 1/1010 2 × 5有因子 5所以在二进制里是无限循环。规律分母只包含因子 2 的分数在二进制里能精确表示。怎么解决方案一容差比较推荐既然有误差那就别用比较改用误差小于某个值12345function isEqual(a, b) {returnMath.abs(a - b) Number.EPSILON;}console.log(isEqual(0.1 0.2, 0.3));// trueNumber.EPSILON是 JavaScript 里最小的可表示精度差约等于 2.22e-16。方案二转成整数算小数不精确整数是精确的。把小数转成整数算完再转回来1234567891011121314// 0.1 0.2constresult (0.1 * 10 0.2 * 10) / 10;// 0.3// 封装一下function add(a, b) {constprecision Math.max((a.toString().split(.)[1] ||).length,(b.toString().split(.)[1] ||).length);constfactor Math.pow(10, precision);return(Math.round(a * factor) Math.round(b * factor)) / factor;}console.log(add(0.1, 0.2));// 0.3方案三toFixed 四舍五入简单粗暴直接四舍五入12constresult parseFloat((0.1 0.2).toFixed(10));console.log(result);// 0.3注意toFixed返回的是字符串要用parseFloat转回数字。方案四用专门的库金融计算这种对精度要求高的场景用专门的库123456// decimal.jsimport Decimalfromdecimal.js;consta newDecimal(0.1);constb newDecimal(0.2);console.log(a.plus(b).toString());// 0.3实际开发中怎么选面试怎么答JavaScript 用 IEEE 754 双精度浮点数存储数字。十进制的 0.1 在二进制里是无限循环小数但只有 52 位存储空间必须截断所以有精度损失。0.1 和 0.2 存储时都有微小误差加起来误差累积结果就不等于 0.3 了。解决方案有几种比较时用容差比较、计算时转成整数、或者用 decimal.js 这样的高精度库。

相关新闻

计算机毕业设计之基于机器学习的葡萄酒品质影响因素分析

计算机毕业设计之基于机器学习的葡萄酒品质影响因素分析

本系统旨在通过机器学习技术深入分析葡萄酒品质的影响因素,综合运用Python、MySQL和Django等先进技术,构建了一个高效、智能的分析平台。系统首先利用Python进行数据预处理和特征工程,提取影响葡萄酒品质的关键特征;随后&#xff…

2026/7/2 8:14:05阅读更多 →
Jasmine测试报告器终极配置:JUnit、TeamCity与桌面通知集成指南

Jasmine测试报告器终极配置:JUnit、TeamCity与桌面通知集成指南

1. 项目概述:为什么你需要这份终极配置指南?如果你正在用 Node.js 写后端服务或者前端逻辑,并且已经引入了 Jasmine 作为你的 BDD(行为驱动开发)测试框架,那么jasmine-node这个命令行工具大概率是你的老朋友…

2026/7/2 8:14:05阅读更多 →
IDEA接口抽取效率提升400%的秘密:基于AST语法树的智能提取算法解析(附可复用的Live Template模板)

IDEA接口抽取效率提升400%的秘密:基于AST语法树的智能提取算法解析(附可复用的Live Template模板)

更多请点击: https://kaifayun.com 第一章:IDEA接口抽取效率提升400%的秘密:基于AST语法树的智能提取算法解析(附可复用的Live Template模板) IntelliJ IDEA 默认的 Extract Interface 功能依赖符号表与简单类型推导&…

2026/7/2 8:14:05阅读更多 →
丰台区配助听器哪家好?选声望听力,专业一站式听力服务更省心

丰台区配助听器哪家好?选声望听力,专业一站式听力服务更省心

丰台区想配助听器?这份实打实的选配指南,建议先看看住在丰台的叔叔阿姨们,如果发现耳朵不好使了,跟人说话老打岔,看电视声音越开越大,其实这种情况很常见。关键是怎么解决。很多人第一反应是“买个助听器”…

2026/7/2 12:10:17阅读更多 →
半夜两点告警群炸了,BE节点CPU爆了,我是怎么5分钟把Doris救回来的?

半夜两点告警群炸了,BE节点CPU爆了,我是怎么5分钟把Doris救回来的?

我踩过的坑,你可别再踩一遍搞Doris运维的兄弟都知道,这玩意儿好用是好用,但一出问题就头大。最常见的一个场景:集群里就一个BE节点CPU飙到100%,其他节点啥事没有,摆明了是数据倾斜。然后你就得翻审计日志、…

2026/7/2 12:10:17阅读更多 →
零基础看懂CRM:全方位拆解客户关系管理系统

零基础看懂CRM:全方位拆解客户关系管理系统

你是否遇到过这些职场头疼场景:销售离职带走半壁核心客户,新人接手连对接人电话都找不到;10万市场推广费砸下去,只知道来了200条线索,最终成单多少、投入产出比多少全算不清;客户打电话投诉上次买的设备出故…

2026/7/2 12:10:17阅读更多 →
定制语音方案哪些合作坑需要避开:创砷电子基于行业经验梳理的专业避坑指南

定制语音方案哪些合作坑需要避开:创砷电子基于行业经验梳理的专业避坑指南

随着物联网产业的发展,智能家居、工业控制、汽车电子等多个领域对个性化语音输出与交互的需求持续增长,定制语音方案已经成为众多产品差异化竞争的重要选择。但由于语音方案定制涉及芯片设计、软件开发、生产调试等多个环节,行业内供应商服务…

2026/7/2 12:10:17阅读更多 →
大模型技术选路指南:收藏这份高性价比就业攻略,小白也能轻松入行!

大模型技术选路指南:收藏这份高性价比就业攻略,小白也能轻松入行!

本文从大模型技术演进的角度,详细分析了LLM、多模态、AIGC三大方向的技术关系与市场趋势。文章指出,与其纠结于单一技术路线,不如关注大模型应用与落地的具体岗位需求。通过分析大模型训练与基座研发、大模型应用与落地、多模态模型研发、AI基…

2026/7/2 12:10:17阅读更多 →
终极免费解锁WeMod Pro会员:Wand-Enhancer本地配置优化完整指南

终极免费解锁WeMod Pro会员:Wand-Enhancer本地配置优化完整指南

终极免费解锁WeMod Pro会员:Wand-Enhancer本地配置优化完整指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 你是否厌倦了每次打开WeMod游…

2026/7/2 12:05:17阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/7/2 12:10:34阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/7/2 12:10:34阅读更多 →
塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧

塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧

塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧 【免费下载链接】BOTW-Save-Editor-GUI A Work in Progress Save Editor for BOTW 项目地址: https://gitcode.com/gh_mirrors/bo/BOTW-Save-Editor-GUI 想在《塞尔达传说:旷野之息…

2026/7/2 0:03:01阅读更多 →
告别 AccessKey:多云平台 CLI OAuth 免密认证完全指南

告别 AccessKey:多云平台 CLI OAuth 免密认证完全指南

在本地开发环境使用云厂商 CLI 时,传统的 AccessKey(AK)方式需要手动创建、下载和保管密钥,不仅繁琐,还存在泄漏风险。其实,主流云平台都已提供基于 OAuth 2.0 的免密认证方案,让开发者可以通过浏览器登录一次性完成授权,CLI 自动管理临时凭证的刷新,兼顾了便利与安全…

2026/7/2 0:03:01阅读更多 →
基于13DOF传感器与PIC32MZ的高精度嵌入式导航系统设计

基于13DOF传感器与PIC32MZ的高精度嵌入式导航系统设计

1. 项目背景与核心价值在嵌入式系统开发领域,高精度定位与导航一直是极具挑战性的技术方向。传统方案往往面临成本、精度和实时性难以兼顾的困境。这个项目通过13DOF(13自由度)传感器组合与PIC32MZ2048EFH100高性能MCU的协同工作,…

2026/7/2 0:03:01阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/2 0:33:58阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/2 1:32:11阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/2 1:50:13阅读更多 →