当前位置: 首页 > news >正文

鹅厂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,而是一个稍微偏离的值。

console.log(0.1 + 0.2); // 输出: 0.30000000000000004

如何处理这个问题?

  1. 使用容差:在比较两个浮点数时,通常会使用一个很小的容差值来判断它们是否“相等”。
    const range= 1e-10; // 或者更小
    console.log(Math.abs(0.1 + 0.2 - 0.3) < range); // 输出: true
    
  2. 转为整数进行计算:将浮点数转换为整数后再进行运算,计算后再转换回来。
    console.log((0.1 * 10 + 0.2 * 10) / 10 === 0.3); // 输出: true
    
  3. 使用专门的库:如果需要高精度的浮点运算,可以使用像 big.jsdecimal.js 这样的库来处理。

总结

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

http://www.lryc.cn/news/460316.html

相关文章:

  • 软件功能测试重点和流程有哪些?专业软件测评服务公司推荐
  • 【数据结构】AVL树(C++实现)
  • AMD新推EPYC与MI325X,挑战英伟达AI市场地位
  • 电脑桌面文件不见了怎么恢复?8个方法帮你解决问题
  • 如果想转行AI领域却不知如何开始?可以试试这五步,超详细_ai行业怎么入行
  • 个人博客搭建 | Hexo框架
  • [Gtk] layout.ui
  • Spring MVC:精通JSON数据返回的几种高效方式
  • [LeetCode 题3] 没有重复字符的最长的子字符串
  • YoloDotNet 在工业检测中的应用详解
  • DataFrame增删改数据
  • 一站式解决App下载量统计,Xinstall引领新潮流
  • ijkMediaPlayer+ TextureView 等比全屏播放视频(避免拉伸)
  • 【RS】GEE(Python):数据处理
  • 非线性磁链观测器推导
  • 什么时机用mysql,什么时机用redis,什么时机用本地内存
  • Redis八股
  • vue3--通用 popover 气泡卡片组件实现
  • Bluetooth Channel Sounding中关于CS Step及Phase Based Ranging相应Mode介绍
  • 简易STL实现 | Queue 的实现
  • 【hot100-java】LRU 缓存
  • Centos7安装ZLMediaKit
  • 面试问我LLM中的RAG,咱就是说秒过!!!
  • python程序操作pdf
  • 【Python报错】ImportError: DLL load failed while importing _network: 找不到指定的模块。
  • 外包干了5天,技术明显退步
  • 正则表达式 | Python、Julia 和 Shell 语法详解
  • JavaScript全面指南(一)
  • docker-compose与docker
  • DDPM浅析