鹅厂JS面试题——0.1+0.2=0.3吗?

首先公布答案:在JavaScript 中,0.1 + 0.2 ≠ 0.3

为什么?

JavaScript 中的数字使用 IEEE 754 标准的双精度浮点数(64 位)进行表示。这种表示方式在处理十进制小数时,不能精确地表示某些数字。比如0.10.2 这样的十进制小数,在转换成二进制浮点数时会产生无限循环的小数,导致它们在内存中只能近似表示。

  • 0.1 在二进制中表示为一个近似值:0.00011001100110011001100110011001100110011001100110011... (无限循环)
  • 0.2 在二进制中表示为另一个近似值:0.001100110011001100110011001100110011001100110011001101... (无限循环)

所以计算0.1 + 0.2时 ,JavaScript 会对这些近似值进行加法运算,结果并不是精确的 0.3,而是一个稍微偏离的值。

javascript 复制代码
console.log(0.1 + 0.2); // 输出: 0.30000000000000004

如何处理这个问题?

  1. 使用容差 :在比较两个浮点数时,通常会使用一个很小的容差值来判断它们是否"相等"。

    javascript 复制代码
    const range= 1e-10; // 或者更小
    console.log(Math.abs(0.1 + 0.2 - 0.3) < range); // 输出: true
  2. 转为整数进行计算 :将浮点数转换为整数后再进行运算,计算后再转换回来。

    javascript 复制代码
    console.log((0.1 * 10 + 0.2 * 10) / 10 === 0.3); // 输出: true
  3. 使用专门的库 :如果需要高精度的浮点运算,可以使用像 big.jsdecimal.js 这样的库来处理。

总结

0.1 + 0.2 在 JavaScript 中不等于 0.3 是由于浮点数表示的精度问题。理解这个问题对于处理涉及精确计算的场景非常重要,并且可以使用容差、整数化或者专门的库来应对这些情况。

相关推荐
hhb_6181 分钟前
Swift核心技术难点与实战案例解析
开发语言·ios·swift
一楼的猫7 分钟前
从工具链视角对比:番茄作家助手 vs 第三方写作辅助方案
java·服务器·开发语言·前端·学习·chatgpt·ai写作
程序leo源11 分钟前
Qt窗口详解
开发语言·数据库·c++·qt·青少年编程·c#
他们叫我阿冠21 分钟前
实习前自我培训-Day1学习
学习
掘金一周25 分钟前
想换一辆电车,JYM有什么推荐 | 沸点周刊 5.21
前端·人工智能·后端
Nian.Baikal33 分钟前
Cesium 3D Tiles 加载与优化实战
前端·cesium
likerhood44 分钟前
Java static 关键字从浅入深
java·开发语言
Upsy-Daisy1 小时前
AI Agent 项目学习笔记(七):RAG 高级扩展——过滤检索、PgVector 与云知识库
人工智能·笔记·学习
柿柿快乐1 小时前
Redis 入门第一课:全局命令、内部编码与单线程模型
redis·学习·缓存·基础教学
KaMeidebaby1 小时前
卡梅德生物技术快报|噬菌体肽库展示技术构建 Mhp168‑Hsp70 定向随机肽库:流程、质控与数据结果
前端·数据库·其他·百度·新浪微博