面试官提问js篇3:js中 0.1 + 0.2 为什么不等于0.3?怎么才能等于0.3?

2023-10-29

一. js中 0.1 + 0.2 为什么不等于0.3?

  • 因为浮点数运算的精度问题。在计算机运行过程中,需要将数据转化成二进制,然后再进行计算。
  • js中的Number类型遵循IEEE754标准,在IEEE754标准的64位浮点数相加,因为浮点数自身小数位数的限制而截断的二进制在转化为十进制,就变成0.30000000000000004,所以在计算时会产生误差。
  • 小数转化为IEEE754的过程:先转化为二进制的形式,然后再用科学计数法表示,接着把通过科学计数法表示的二进制数用IEEE754标准表示。

二.怎么才能等于0.3?

第一种办法:

使用Math类中的toFixed()方法,保留你需要的小数点位数。

第二种方法:

Number.EPSILON可以用来设置“能够接受的误差范围”。比如,误差范围设为 2 的-50 次方(即Number.EPSILON * Math.pow(2, 2)),即如果两个浮点数的差小于这个值,我们就认为这两个浮点数相等。

Number.EPSILON=(function(){    
    //解决兼容性问题(IE10不兼容)
    return Number.EPSILON?Number.EPSILON:Math.pow(2,-52);
})();
            
//上面是一个自调用函数,当JS文件刚加载到内存中,就会去判断并返回一个结果,相比if(!Number.EPSILON){
// Number.EPSILON=Math.pow(2,-52);
//}这种代码更节约性能,也更美观。

function numbersequal(a,b){  
     return Math.abs(a-b)<Number.EPSILON;
 }

//接下来再判断     
var a=0.1+0.2, b=0.3;
console.log(numbersequal(a,b));  //这里就为true了
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

面试官提问js篇3:js中 0.1 + 0.2 为什么不等于0.3?怎么才能等于0.3? 的相关文章

  • 什么是人力资源360度评估法?

    1 360度评估法的定义 360度评估法 360 Feedback 又称 360度考核法 或 全方位考核法 属于人力资源中绩效考核方法之一 是指由员工自己 上司 直接部属 同仁同事甚至顾客或家人等从全方位 各个角度来评估人员的方法 而且 为
  • java注解与反射的基本使用(这一篇就够了!)

    一 注解 Annotation 1 什么是注解 相信大家对注解应该并不陌生 在现在信息飞速发展的年代 各种优秀的框架或许都离不开注解的使用 像我们在实现接口一个方法时 也会有 Override注解 注解说白了就是对程序做出解释 与我们在方法

随机推荐

  • 【three.js】世界坐标系和设备坐标系

    three js 坐标系转换 简述 屏幕坐标转世界坐标 世界坐标转屏幕坐标 第三方 CSS2DRenderer 第三方 CSS3DRenderer 简述 物体的坐标转换过程大致为 局部坐标 gt 世界坐标 gt 观察空间坐标 gt 裁剪空间
  • vue项目流程demo示例

    前言 自己写从头做一个vue项目 没什么技术 主要是温顾流程 gt 没写完 只写到创建完项目 目录 1 准备工作 node 淘宝镜像 yarn vite IDE集成开发工具 2 创建项目 初始化项目 文件目录 3 全局设置 主题设置 全局变
  • python3,使用sys.setdefaultencoding('utf-8'),编译时报错

    借鉴博客 http blog csdn net fly910905 article details 74922378 正常情况下 我们在使用python做页面开发时 防止中文出现乱码问题 python2 情况下会使用 如下语句 import
  • ‘mkvirtualenv‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

    问题 mkvirtualenv 不是内部或外部命令 也不是可运行的程序 或批处理文件 或者 mkvirtualenv 无法将 mkvirtualenv 项识别为 cmdlet 函数 脚本文件或可运行程序的名称 请检查名称的拼写 如果包括路径
  • 华为HCIP云计算考证心得

    华为认证是社会认证中一种 现在很多公司也比较看重这个的 有的公司还会根据你考取证书的等级高低有工资加成 透露下我之前所在的公司 是华为的合作伙伴 就是华为代理公司把 持有HCIP证书可有每月有500的加成 IE的话1000 当然不同的公司也
  • php实现抽奖

    不啰嗦 直接上代码
  • Unity 轻量级对象池管理器(上)

    参考 https www jianshu com p 144181beab79 完整代码请跳转至 Unity 轻量级对象池管理器 下 一 前言 很多时候 你都要考虑一个问题 就是到底是牺牲时间换空间 还是牺牲空间换时间 特别是在资源紧缺的那
  • 前后端分离项目打包上传服务器

    前后端分离项目打包上传服务器 项目环境 前端项目打包 npm run build 后端项目打包 xshell和xftp 项目环境 本次项目前端使用的是vue 后端使用spring boot 分别使用的编辑器是vs code和ide 前端项目
  • Failed to load resource: the server responded with a status of 500 ()

    文章目录 前提 解决思路 心得 前提 1 最近在写SSM博客项目 基于jsp编写的 跟着视频敲 直接运行已经给好的资料 在登录验证的时候 发现页面加载半天 如下图 2 于是就盲目的去比对是不是自己复制的代码有问题 然后就一行行的比对 这犯了
  • Linux中磁盘分区的具体步骤

    磁盘分区是在Linux操作系统中重要的任务之一 通过分区可以让我们更好地管理磁盘空间 并更好地使用磁盘来存储数据和程序 在这篇博客里 我将向大家介绍如何在Linux中进行磁盘分区的实战步骤 步骤一 打开终端 首先 我们需要打开终端 在终端中
  • Linux系统巡检项及详细巡检方法与解决方案

    一 背景 1 开发脚本实现OS配置参数巡检 2 推动监控系统发布OS巡检插件 3 利用监控数据形成报表 二 巡检项整改方案解析 1 检查僵尸进程 此项检查项是检查主机系统是否存在D状态的进程 D是一种不可中断的sleep 如果发现D状态并且
  • [React Hooks 翻译] 3-8 State Hook

    示例 等价的class组件 使用class实现一个计数器 你可能会这么写 class Example extends React Component constructor props super props this state coun
  • 微信公众号 几种移动端UI框架介绍

    微信公众号 几种移动端UI框架介绍 微信公众号开发 主要是移动端网页的页面开发 在这里推荐3个移动端UI框架 WeUI SUI和Mint UI 1 WeUI 1 1 WeUI WeUI是微信官方设计团队为微信 Web 开发量身设计 可以令用
  • 从RecyclerView、NestedScrollView源码分析嵌套滑动异常

    一 显示不全 自动滚动异常 NestedScrollView嵌套RecyclerView时 有2个问题 1 RecyclerView数据加载完成后 会自动滚动到第一个itemView的位置上 导致RecyclerView上面的布局不显示 2
  • 处理 Java 异常时应避免的 7 个常见错误

    处理异常是最常见但不一定是最简单的任务之一 它仍然是经验丰富的团队中经常讨论的话题之一 并且我们应该了解一些最佳实践和常见错误 以下是在处理应用程序中的异常时应避免的几个错误 错误 1 指定一个 java lang Exception 或
  • uwb定位上位机定位源码流程分析

    主要用到的文件有两个 1 SerialConnection cpp 负责串口初始化相关内容 2 RTLSClient cpp 负责解算标签坐标并发送给上位机 3 trilateration cpp 解算坐标数学原理 1 先执行 函数 voi
  • 斐波那契额数列

    斐波那契额数列 文章目录 斐波那契额数列 前言 一 迭代法 二 公式法估算 三 矩阵快速幂加高精度 完 前言 采用三种方法求斐波那契数列 迭代法 公式法 矩阵快速幂加高精度 偷偷告诉你 可以精确求到一万位斐波那契数 一 迭代法 includ
  • 网络剪枝(1)

    论文名 Learning Efficient Convolutional Networks through Network Slimming 本文主题 Network Slimming 1 剪枝的三种意义 re duce the model
  • 串口通信----串口接收框接收不到数据

    在进行串口调试时 数据发送没有问题 但是其他串口给该串口发送数据时 接收框始终接收不到数据 也不提示错误 感觉接收函数不起作用 对照之前没有问题的串口程序 发现只有这部分没有添加进去 其他都是一样的 问题应该在这里 添加进去后 正常接收了
  • 面试官提问js篇3:js中 0.1 + 0.2 为什么不等于0.3?怎么才能等于0.3?

    一 js中 0 1 0 2 为什么不等于0 3 因为浮点数运算的精度问题 在计算机运行过程中 需要将数据转化成二进制 然后再进行计算 js中的Number类型遵循IEEE754标准 在IEEE754标准的64位浮点数相加 因为浮点数自身小数