web前端面试-- IEEE754标准JS精度丢失问题0.1+0.2!=0.3、0.2+0.3==0.5 十进制转二进制讲解

本人是一个web前端开发工程师,主要是vue框架,整理了一些面试题,今后也会一直更新,有好题目的同学欢迎评论区分享 ;-)

web面试题专栏:点击此处

![在这里插入图片描述](https://img-blog.csdnimg.cn/3c22340ec77044eaba7196c88737821d.png


背景

WEB前端面试官:0.2+0.3是否等于0.5?
:)

好家伙,不按套路出牌,之前也没深究,但是既然重新学习一下,就记录一下,免得又忘记了。

分析问题

面试官是问你0.1+0.2,或者0.2+0.3的问题吗?
不是的,要是下次有个作妖的问你,0.x+0.y呢?
显然不是,他要问你的是原理~

0.1+0.2
// 0.30000000000000004
0.2+0.3
// 0.5

控制台运行如下:
在这里插入图片描述


原理

死记硬背~~~。

  1. 在浏览器的JavaScript环境中,遵循IEEE 754标准,就算记不全,也要记得IEEE(理科生搞得跟文科生一样,真蛋疼。。。)
  2. 这个标准规定了浮点数的二进制表示以及浮点数的运算规则。
  3. JavaScript中的Number类型就是基于这个标准实现的。因此,JavaScript中的浮点数遵循IEEE 754标准的规定,也会出现浮点数精度问题。

总的来说:IEEE754标准下,浮点数是用二进制进行存储运算的,部分十进制小数转成二进制是一个无限循环的数值,运算的时候会造成精度丢失。


复现

在浏览器环境中以IEEE754存储的0.1、0.2、0.3 咱们可以直接在控制台打印出来。

0.1.toString(2);
0.2.toString(2);
0.3.toString(2);

控制台运行如下:
在这里插入图片描述


十进制小数转二进制

方法:小数乘2取整,直到没有小数为空,最后取整的数值进行正向排列就得到了。
以0.1 为例:

数值取整
0.1 * 2 = 0.20
0.2 * 2 = 0.40
0.4 * 2 = 0.80
0.8 * 2 = 1.61
0.6 * 2 = 1.21
0.2 * 2 = 0.40
0.4 * 2 = 0.80
0.8 * 2 = 1.61
0.6 * 2 = 1.21
0.2 * 2 = 0.40
0.4 * 2 = 0.80
0.8 * 2 = 1.61
0.6 * 2 = 1.21
(无限循环)…

正向排列整理后: 0001100110011…

十进制证书转二进制

方法:整数除2取余,直到整数为0,最后取余的数值进行倒叙排列就得到了。
以6为例:

数值余数
6 / 2= 3 % 00
3 / 2 = 1 % 11
1 / 2 = 0 % 11

倒叙排列整理后: 110

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

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

相关文章

JDBC-day06(数据库连接池)

八:数据库连接池 1. 传统连接数据库的模式 在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤: 在主程序(如servlet、bea,ns)中建立数据库连接进行sql操作断开数据库连接 传统的模式存在的问…

zookeeper(目前只有安装)

安装 流程 学kafka的时候安装 Apache ZooKeeper 安装地址:https://archive.apache.org/dist/zookeeper/zookeeper-3.5.7/apache-zookeeper-3.5.7-bin.tar.gz 解压 tar -zxvf kafka_2.12-3.0.0.tgz -C /export/server/ 改配置 cd config cp zoo_sample.cfg z…

一、vue介绍

一、介绍 vue式前端框架,是一套用于构建用户界面的渐进式框架 1、安装vue 安装node.js(配置环境变量) https://nodejs.org/en/download/ 更换镜像 npm config set registry https://registry.npm.taobao.org 查看镜像 npm config get regi…

Pixhawk 6c (PX4)真机USB连接mavros失败

概述 笔者和同事近期购买了Pixhawk6c,它也是目前Pixhawk系列中最新的飞控。 但是在测试的过程中遇到了一个问题,发现它无法连接到mavros。 于是进行了一系列原因摸排,在国内的博客尚未看到能用的解决方案,在px4论坛上倒是找到了答…

VUE:侧边弹出栏组件,组件中有树状图,搜索框可筛选树状图节点,可收缩

作者:CSDN @ _乐多_ 本文记录了一个侧边弹出栏组件代码。代码即插即用。 弹出栏中有树状图,搜索框,可收缩。 其中,搜索框可筛选树状图节点。点击右侧小按钮可以收缩弹出框,点击X号也可以收缩弹出框。 文章目录 一、组件代码代码依赖element-plus库。且需要下载几个svg图…

Hadoop分布式计算框架-MapReduce

本文所有代码链接:https://download.csdn.net/download/shangjg03/88437313 1.MapReduce概述 Hadoop MapReduce 是一个分布式计算框架,用于编写批处理应用程序。编写好的程序可以提交到 Hadoop 集群上用于并行处理大规模的数据集。 MapReduce 作业通过将输入的数据集拆分为独…

FUNCTION 表示 getter setter

场景: 某些时候,会对同一个对象的多个不同属性做相同操作,代码复用原则,可以把 getter setter 用 FUNCTION 表示; import java.util.function.BiConsumer;import java.util.function.Function;private static void res…

采集数据重复解决方法

在大数据采集或大批量采集文章时,有可能会出现数据重复,而重复数据会导致数据分析出现偏差甚至错误,如何避免采集数据重复是个值得研究的问题。 目录 1. 优化采集方案 2. 过滤去重规则 3. 比对算法 4. 数据采集工具 减少采集数据重复的常…

grafana v10.1版本设置告警

1. 相关概念概述 如图所示,点击切换菜单标志,可以看到警报相关子选项。 警报规则:通过PromQL语句定义告警规则,即达到怎样的状态触发告警。 联络点: 设置当警报规则实例触发时,如何通知联系人,…

AI杀疯!2023上半年至今有趣的AI算法(内附视频)

公众号:算法一只狗 文章目录 第一个,一切都可以进行分割第二个,开源图文回答工具第三个,视频转换风格生成第四个,免费好用的文档对话工具文档对话能力文档联系功能 今年,我们见证了人工智能算法的起飞&…

用结构加法比较4个结构的顺序

( A, B )---5-30-2---( 1, 0 )( 0, 1 ) 让网络的输入只有5个节点,AB训练集各由5张二值化的图片组成,让A中有5个点,B全是0。统计迭代次数并排序。 其中5-x有4组数据 5-x 差值结构 迭代次数 41 4-x 差值结构 迭代次数 19 0 0 1 236…

Python 机器学习入门之ID3决策树算法

系列文章目录 第一章 Python 机器学习入门之线性回归 第一章 Python 机器学习入门之梯度下降法 第一章 Python 机器学习入门之牛顿法 第二章 Python 机器学习入门之逻辑回归 番外 Python 机器学习入门之K近邻算法 番外 Python 机器学习入门之K-Means聚类算法 第三章 Python 机…

常量字符串

一、常量字符串是什么? 常量字符串是一个常量,它的值是首字符的地址 比如 "abcdefg" 或 "123456789" 就是常量字符串 二、常量字符串与普通字符串的区别 1.常量字符串不可更改,而普通字符串可以更改 利用memcpy内存…

python知识:从PDF 提取文本

一、说明 PDF 到文本提取是自然语言处理和数据分析中的一项基本任务,它允许研究人员和数据分析师从 PDF 文件中包含的非结构化文本数据中获得见解。Python 是一种通用且广泛使用的编程语言,它提供了多个库和工具来促进提取过程。 二、各种PDF操作库 让我…

Vue+openlayers+projs4实现坐标转换

一、背景 有一堆点数据,需要在地图上标记,只知参考北京54坐标系或西安80坐标系,但具体是哪种不清楚,这时候就需要坐标转换。ps:EPSG:3857(openlayers参照的坐标系) 二、思路 1、研…

原码、反码、补码在汇编中的应用

原文章:知乎 原码和二进制类似,不过它有符号位。正数符号位为0,负数为1 。 例:40000 0100 ,-41000 0100 原码是人脑最容易理解和计算的表示方式。 但是这在计算机中计算就出了问题,这两个(4…

Jmeter接口测试:jmeter导入和导出接口的处理

JMeter测试导入接口 利用Jmeter测试上传文件,首先可根据接口文档或者fiddler抓包分析文件上传的接口;如下图: 以下是我通过fiddler所截取的文件上传的接口 1、填写导入接口的信息 查看文件上传栏下的填写信息: 文件名称&#x…

vue与react,angular的区别

Vue.js 作为一个优秀的前端框架,方便前端开发者快速开发应用的前端,在实际项目中使用得比较普遍。 当然 Vue.js 也不是实际项目中唯一的前端框架,比较优秀的前端框架还有 React、AngularJS 和 Angular等。接下来就介绍一下 Vue.js 同这3个框架…

大数据Flink(九十九):SQL 函数的解析顺序和系统内置函数

文章目录 SQL 函数的解析顺序和系统内置函数 一、​​​​​​​SQL 函数

供应IPQ4018原装芯片

长期供应各品牌原装芯片: AG3331 AG3335MNV AG3352 ALT1250BZ-E0 ALT1250TG-D0 ASR1601 ASR1603E ASR1603S ASR1606C ASR1606L ASR1606S ASR1802S ASR1803E ASR1803S ASR1826 ASR3601 BCM47755 BCM47768 BK7231M CB0201 CB0201L CYW43438 CY…