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

server/2024/12/21 20:44:15/

首先公布答案:在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 是由于浮点数表示的精度问题。理解这个问题对于处理涉及精确计算的场景非常重要,并且可以使用容差、整数化或者专门的库来应对这些情况。


http://www.ppmy.cn/server/132218.html

相关文章

如何在Vue项目中封装axios

文章目录 一、axios简介基本使用 二、封装axios的原因三、封装axios的方法1. 设置接口请求前缀2. 设置请求头和超时时间3. 封装请求方法4. 添加请求拦截器5. 添加响应拦截器小结 一、axios简介 axios 是一个基于 XMLHttpRequest 的轻量级HTTP客户端&#xff0c;适用于浏览器和…

调用AI 通过相机识别地标

https://www.youtube.com/watch?vViRfnLAR_Uc&listPLQkwcJG4YTCRJxkPPDBcKqDWrfF5qanQs&index3学习视频 TensorFlow Hub 机器学习模型的代码库 找到地标模型 如何在Android上使用ts模型 https://blog.tensorflow.org/2018/03/using-tensorflow-lite-on-android.html…

Vue实现动态表单

使用 Vue 实现动态表单 在前端开发中&#xff0c;我们经常遇到根据用户输入动态生成不同表单项的需求。这类动态表单不仅提升了用户体验&#xff0c;还可以让复杂的交互流程变得简洁而高效。本文将详细讲解如何使用 Vue 3 的响应式特性&#xff0c;逐步构建一个递归动态表单。…

Spring Boot 3新特性@RSocketExchange轻松实现消息实时推送

Spring Boot 3新特性RSocketExchange轻松实现消息实时推送 随着微服务架构的普及&#xff0c;实时消息推送成为许多现代应用程序的核心需求。Spring Boot 3引入了RSocketExchange注解&#xff0c;这一新特性使得开发者能够轻松实现消息实时推送&#xff0c;极大地简化了客户端…

js面试题---js伪类和伪元素的区别

一 伪类&#xff08;Pseudo-classes&#xff09; 1 定义 伪类是用于选择处于特定状态或条件下的 HTML 元素。它们通常以单冒号 (&#x1f603; 开头&#xff0c;后面跟着伪类名称。这些状态可能与用户的交互、元素在文档中的结构位置等相关。 2 常见伪类 :hover 当鼠标悬停…

游戏服务端架构演进

文章目录 前言初出茅庐粗通皮毛略有小成炉火纯青内劲深厚最后 前言 对于网络游戏&#xff0c;一般分为客户端和服务端&#xff0c;客户端主要负责界面图像的渲染与一些交互操作&#xff0c;服务端主要负责数据的业务处理与存储还有与客户端之间的信息交互 比如玩家聊天、广播…

【C语言教程】【常用类库】(十三)异常处理 - <setjmp.h> 和 <assert.h>

13. 异常处理 - <setjmp.h> 和 <assert.h> 在C语言中&#xff0c;异常处理不像在一些现代高级语言中有内建的 try-catch 机制&#xff0c;但可以通过使用 <setjmp.h> 提供的setjmp和longjmp 来实现类似的异常处理机制。同时&#xff0c;<assert.h> 提…

『网络游戏』客户端发送消息到服务器【17】

将上一章服务器的协议PEProtocol的.dll文件重新生成导入unity客户端中 命名为Net 点击生成 另一种导入.dll文件方式 在客户端粘贴即可 此时Net文件夹的.dll文件就导入进来了 创建脚本&#xff1a;NetSvc.cs 编写脚本&#xff1a;NetSvc.cs 修改脚本&#xff1a;GameRoot.cs 在…