0.1加0.2为什么不等于0.3

news/2026/1/19 15:45:24/文章来源:https://www.cnblogs.com/smileZAZ/p/19502037

🧑‍💻 写在开头

点赞 + 收藏 === 学会🤣🤣🤣

这个问题你可能在面试、线上 Bug、甚至随手写 Demo 的时候都见过:

console.log(0.1 + 0.2 === 0.3); // false

很多人第一反应是“浮点数精度问题”,但如果继续追问:

  • 为什么偏偏是 0.10.2 这种小数出问题?
  • “精度”到底精在哪一位、丢在哪一步?
  • 实际开发里应该怎么比较、怎么计算才稳?

这篇文章按“现象 → 原因 → 解决 → 面试回答”的顺序,把它讲透。

先看现象

console.log(0.1 + 0.2);  // 0.30000000000000004
console.log(0.1 + 0.7);  // 0.7999999999999999
console.log(0.3 - 0.2);  // 0.09999999999999998
console.log(0.1 * 3);    // 0.30000000000000004
但有些计算又是对的:
console.log(0.5 + 0.5);    // 1
console.log(0.25 + 0.25);  // 0.5
console.log(0.125 * 8);    // 1

为什么?

根本原因:二进制无法精确表示某些十进制小数

计算机用二进制存储数字。十进制的 0.5 在二进制里是 0.1,能精确表示。但十进制的 0.1 在二进制里是:

0.0001100110011001100110011001100110011... (无限循环)

就像十进制里 1/3 = 0.333... 无限循环一样,0.1 在二进制里也是无限循环的。

但计算机内存有限,不能存无限长的数字,必须在某个位置截断。JavaScript 用的是 IEEE 754 双精度浮点数,只有 64 位,其中 52 位用来存小数部分。

截断就意味着误差。

哪些数能精确表示?

能被 2 的幂次整除的小数,在二进制里都能精确表示:

// 这些都是精确的
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/10,10 = 2 × 5,有因子 5,所以在二进制里是无限循环。

规律:分母只包含因子 2 的分数,在二进制里能精确表示。

怎么解决?

方案一:容差比较(推荐)

既然有误差,那就别用 === 比较,改用"误差小于某个值":

function isEqual(a, b) {return Math.abs(a - b) < Number.EPSILON;
}console.log(isEqual(0.1 + 0.2, 0.3)); // true

Number.EPSILON 是 JavaScript 里最小的可表示精度差,约等于 2.22e-16。

方案二:转成整数算

小数不精确,整数是精确的。把小数转成整数,算完再转回来:

// 0.1 + 0.2
const result = (0.1 * 10 + 0.2 * 10) / 10;  // 0.3// 封装一下
function add(a, b) {const precision = Math.max((a.toString().split('.')[1] || '').length,(b.toString().split('.')[1] || '').length);const factor = Math.pow(10, precision);return (Math.round(a * factor) + Math.round(b * factor)) / factor;
}console.log(add(0.1, 0.2)); // 0.3

方案三:toFixed 四舍五入

简单粗暴,直接四舍五入:

const result = parseFloat((0.1 + 0.2).toFixed(10));
console.log(result); // 0.3

注意 toFixed 返回的是字符串,要用 parseFloat 转回数字。

方案四:用专门的库

金融计算这种对精度要求高的场景,用专门的库:

// decimal.js
import Decimal from 'decimal.js';const a = new Decimal(0.1);
const b = new Decimal(0.2);
console.log(a.plus(b).toString()); // "0.3"

实际开发中怎么选?

面试怎么答?

JavaScript 用 IEEE 754 双精度浮点数存储数字。十进制的 0.1 在二进制里是无限循环小数,但只有 52 位存储空间,必须截断,所以有精度损失。0.1 和 0.2 存储时都有微小误差,加起来误差累积,结果就不等于 0.3 了。

解决方案有几种:比较时用容差比较、计算时转成整数、或者用 decimal.js 这样的高精度库。

如果面试官继续问"IEEE 754 是什么",可以补充:

IEEE 754 是浮点数的存储标准,用 64 位存一个数字:1 位符号位、11 位指数位、52 位尾数位。这个标准是为了让不同计算机上的浮点运算结果一致。

一道相关的坑题

console.log(0.1 + 0.2 - 0.3); // ?

答案不是 0,而是 5.551115123125783e-17

再来一道:

console.log(9999999999999999); // ?

答案是 10000000000000000。因为超出了安全整数范围(2^53 - 1),精度丢失了。

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1183742.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从布局分析到元素识别|基于PaddleOCR-VL的全流程技术拆解

从布局分析到元素识别&#xff5c;基于PaddleOCR-VL的全流程技术拆解 1. 引言&#xff1a;文档解析的新范式 在数字化转型加速的背景下&#xff0c;文档解析已成为信息提取、知识管理与自动化流程中的关键环节。传统OCR技术多聚焦于文本识别&#xff0c;难以应对现代文档中复…

NewBie-image-Exp0.1与Mochi Diffusion对比:长尾特征生成能力评测

NewBie-image-Exp0.1与Mochi Diffusion对比&#xff1a;长尾特征生成能力评测 1. 引言 1.1 选型背景 在当前AI生成内容&#xff08;AIGC&#xff09;领域&#xff0c;动漫图像生成已成为一个高度活跃的技术方向。随着用户对角色细节、风格多样性以及属性控制精度的要求不断提…

小程序毕设选题推荐:基于springboot+微信小程序的考研刷题平台考研复习辅助平台【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

如何通过工业智造超级智能体实现汽车制造工厂数字化转型

如何通过工业智造超级智能体实现汽车制造工厂数字化转型技术架构的核心突破工业智造超级智能体正在彻底改变汽车制造业的数字化转型路径。与传统的自动化系统不同&#xff0c;这种智能体采用了一种全新的架构设计——它不仅仅是简单的机器替代人力&#xff0c;而是构建了一个能…

Youtu-2B影视创作:剧本构思与对白生成

Youtu-2B影视创作&#xff1a;剧本构思与对白生成 1. 引言&#xff1a;轻量大模型在创意内容生产中的新角色 随着大语言模型&#xff08;LLM&#xff09;技术的不断演进&#xff0c;AI在内容创作领域的应用已从简单的文本补全扩展到复杂的叙事构建。尤其是在影视创作中&#…

从零开始:用Qwen2.5-0.5B-Instruct打造个人AI助手

从零开始&#xff1a;用Qwen2.5-0.5B-Instruct打造个人AI助手 1. 引言&#xff1a;为什么选择轻量级AI助手&#xff1f; 随着大模型技术的快速发展&#xff0c;越来越多开发者和普通用户希望在本地设备上部署个性化的AI助手。然而&#xff0c;大多数主流大模型&#xff08;如…

【必学收藏】DeepSeek Engram新突破:通过可扩展查找实现条件记忆,开启大模型稀疏化新方向

DeepSeek Engram是一种新型条件记忆模块&#xff0c;通过N-gram查找表让大模型直接访问连续token组合的信息。该技术使用压缩和哈希方法处理大规模稀疏表&#xff0c;通过多头哈希减少冲突&#xff0c;并采用上下文感知门控机制决定信息使用。实验表明&#xff0c;将70-80%参数…

Docker镜像使用

Docker镜像使用列出本镜像查找某个镜像下拉某个镜像查看占用空间删除镜像启动镜像列出当前所有正在运行的容器退出容器启动一个或多个已经被停止的容器重启容器停止容器暂停容器中所有的进程删除已停止的容器杀掉一个运行中的容器恢复容器中所有的进程列出本镜像 docker image…

Fun-ASR-MLT-Nano-2512语音模型压缩:量化与剪枝实战

Fun-ASR-MLT-Nano-2512语音模型压缩&#xff1a;量化与剪枝实战 1. 章节名称 1.1 技术背景 随着多语言语音识别需求的快速增长&#xff0c;大参数量模型在准确率上表现出色&#xff0c;但其高资源消耗限制了在边缘设备和低延迟场景中的部署。Fun-ASR-MLT-Nano-2512 是阿里通…

【收藏必学】AI大模型入行攻略:避开弯路,掌握实用技能,轻松入行

随着DeepSeek的爆火&#xff0c;各行各业的AI大模型应用正在加速普及&#xff0c;金融、电商、医疗、法律、制造等行业不断落地应用&#xff0c;同时也逐渐融入了我们的日常生活&#xff0c;做个图&#xff0c;问个问题&#xff0c;润色个文案……我们已经习惯了求助于DeepSeek…

快速掌握Android init.rc配置,启动脚本轻松集成

快速掌握Android init.rc配置&#xff0c;启动脚本轻松集成 1. 引言&#xff1a;为何需要自定义开机启动脚本 在Android系统开发中&#xff0c;尤其是在定制ROM、设备初始化或嵌入式场景下&#xff0c;经常需要在系统启动过程中执行一些特定的初始化操作。这些操作可能包括设…

必收藏!RAG与Agentic RAG全解析:从基础到进阶,解锁大模型实用能力

在大模型应用落地过程中&#xff0c;“AI幻觉”和静态知识局限一直是困扰开发者的核心问题。检索增强生成&#xff08;RAG&#xff09;技术的出现&#xff0c;为解决这两大痛点提供了高效方案&#xff0c;而其进化版代理式检索增强生成&#xff08;Agentic RAG&#xff09;&…

2026年挂具脱漆炉推荐:鱼台光华环保科技挂具脱漆炉设备/原理/报价/定制全解析

在工业涂装与表面处理领域,挂具脱漆炉作为关键设备,直接影响着生产效率与环保水平。据行业统计,2025年国内挂具脱漆设备市场规模已突破12亿元,年复合增长率达8.7%,其中环保型设备占比超65%。在众多设备供应商中,…

vLLM部署HY-MT1.5-7B指南|高性能翻译模型落地实践

vLLM部署HY-MT1.5-7B指南&#xff5c;高性能翻译模型落地实践 在多语言信息处理日益成为刚需的今天&#xff0c;高质量、低延迟的机器翻译能力已成为数据科学家、AI工程师和跨国业务团队的核心工具。尤其在涉及少数民族语言、混合语种文本或专业术语场景下&#xff0c;通用翻译…

腾讯云TI-ONE平台部署图片旋转判断模型指南

腾讯云TI-ONE平台部署图片旋转判断模型指南 1. 引言 1.1 图片旋转判断的技术背景 在图像处理与计算机视觉的实际应用中&#xff0c;图片的方向问题是一个常见但不可忽视的挑战。尤其是在移动端用户上传、扫描文档识别、OCR文本提取等场景中&#xff0c;图片可能以任意角度拍…

DeepSeek-R1-Distill-Qwen-1.5B部署省50%成本?真实案例分享

DeepSeek-R1-Distill-Qwen-1.5B部署省50%成本&#xff1f;真实案例分享 1. 背景与选型动机 在当前大模型快速迭代的背景下&#xff0c;越来越多企业与开发者面临一个现实问题&#xff1a;如何在有限算力资源下实现高性能推理能力。尤其是在边缘设备、嵌入式平台或低成本服务器…

ADAS软件开发

ADAS&#xff08;Advanced Driver Assistance Systems&#xff0c;高级驾驶辅助系统&#xff09;软件开发是一个融合了计算机视觉、传感器融合、控制算法、嵌入式系统和人工智能等多领域技术的复杂工程。以下是ADAS软件开发的关键组成部分、开发流程和技术栈概览&#xff1a;一…

服务CPU突然飙到100%,用Arthas三分钟定位到问题代码

前言 那天下午正准备摸鱼&#xff0c;突然收到告警&#xff1a;生产环境某服务CPU使用率100%。 打开监控一看&#xff0c;好家伙&#xff0c;4核全部打满&#xff0c;而且已经持续了好几分钟。赶紧上服务器排查。 第一步&#xff1a;确认是哪个进程 先用top看一眼&#xff…

2026年热门的/有实力的/质量好的/正规的/高品质的蒸发器厂家权威推荐榜:聚焦节能、高粘度处理与工业废水净化

在化工、制药、食品、环保等诸多工业领域,蒸发器作为核心的浓缩、结晶与分离设备,其性能的优劣直接关系到生产线的效率、能耗与最终产品质量。市场上供应商众多,产品描述琳琅满目,如何从“优质蒸发器”、“专业蒸发…

高精地图车端引擎开发

1.高精地图车端引擎开发 高精地图车端引擎开发是智能驾驶系统中的核心技术之一&#xff0c;主要负责在车辆端高效加载、解析、管理和使用高精地图数据&#xff0c;为感知、定位、规划与控制等模块提供精准的地理空间信息支撑。以下是高精地图车端引擎开发的关键要素和技术要点…