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

news2024/11/29 3:40:31

本人是一个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.coloradmin.cn/o/1111304.html

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

相关文章

文心一言 VS 讯飞星火 VS chatgpt (116)-- 算法导论10.3 1题

一、用go语言,画图表示序列(13,4,8,19,5,11),其存储形式为多数组表示的双向链表。同样画出单数组表示的形式。 文心一言: 在Go语言中,我们无法直接画图,但我…

用Python造轮子

目录 背景安装setuptools库准备要打包的代码创建setup.py文件打包生成whl文件把库装到电脑上使用这个库 背景 如何把自己写的代码,打包成库方便其他人使用 安装setuptools库 正所谓想要富先修路,先把造轮子要用的库装上 pip install wheel pip insta…

C# Socket通信从入门到精通(1)——单个同步TCP客户端C#代码实现

前言: Socket通信中有tcp通信,并且tcp有客户端和服务器,本文介绍的就是如何使用c#去实现一个tcp客户端,并且由于c#中有多种方式可以实现tcp客户端的功能,本文介绍的是使用TcpClient类来实现tcp客户端功能(如需源码,订阅专栏后加入文章底部qq群获取),demo软件界面如下…

供应链 | 零售商-供应商柔性承诺契约:一种鲁棒优化方法 (二)

原文作者:Aharon Ben-Tal, Boaz Golany, Arkadi Nemirovski, Jean-Philippe Vial​ 引用:Ben-Tal, A., Golany, B. , Nemirovski, A., & Vial, J. P… (2005). Retailer-supplier flexible commitments contracts: a robust optimization approach. …

View 自定义 - 概览

一、体系 详见:Activity、Window、DecorView、ViewRoot 之间的关系 二、绘制前的准备 DecorView 详见:DecorView 顶部图中可以看出 ViewRoot 最后一步是绘制,在绘制之前系统会有一些准备,即前面几个步骤:创建PhoneW…

D/A变换器隔离变送器PWM信号转模拟量1Hz~10KHz转0-5V/0-10V/4-20mA

主要特性: >>精度等级:0.1级。产品出厂前已检验校正,用户可以直接使用 >>辅助电源:8-32V 宽范围供电 >>PWM脉宽调制信号输入: 1Hz~10KHz >>输出标准信号:0-5V/0-10V/1-5V,0-10mA/0-20mA/4-20mA等&…

绝地求生游戏缺少msvcp140.dll丢失打不开怎么办?这6个方法都能修复

计算机系统中,我们经常遇到各种错误和问题。其中,“MSCVCP140.DLL丢失”是一个常见的错误,它通常出现在运行某些程序或游戏时。这个DLL文件是Microsoft Visual C 2015 Redistributable的一部分,如果它丢失或损坏,可能会…

Spring Boot 可以同时处理多少请求?

文章目录 Spring Boot 的请求处理能力1. 硬件资源2. 应用程序的设计3. 配置4. 运行时环境 基准测试和性能优化高性能的 Spring Boot 应用程序示例结论 🎉欢迎来到架构设计专栏~Spring Boot 可以同时处理多少请求? ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#…

凝聚技术力量 共建测试生态 ——集成电路测试技术交流日成功举办

10月18日下午,凝聚技术力量,共建测试生态 ——集成电路测试技术交流会在上海成功举办。来自全国各地知名专家学者、技术大咖及企业代表齐聚一堂,共同探讨封装测试技术的发展方向,共话产业未来,共促产业发展。 本次活动…

Web前端—盒子模型:选择器、PxCook、盒子模型、正则表达式、综合案例(产品卡片与新闻列表)

版本说明 当前版本号[20231019]。 版本修改说明20231018初版20231019补充了综合案例二新闻列表的代码及完善部分代码 目录 文章目录 版本说明目录盒子模型01-选择器结构伪类选择器基本使用:nth-child(公式)伪元素选择器 02-PxCook03-盒子模型盒子模型-组成边框线四个方向单方…

Linux将磁盘空闲空间转移到其他目录下(home目录转移到root目录下)

目录 1、查看分区 2、备份home分区文件 (重要) 3、卸载/home 4、删除/home所在的lv 5、扩展/root所在的lv(我这里还扩展了、dev/sr0) 6、扩展/root文件系统。 7、重新创建home lv 创建时计算好剩余的磁盘容量,建…

html或web页面一键打包为apk

最近需要将html通过app的方式发布,但是苦于不会android,因此在网上找到了一个打包apk的工具。 官方首页:Download v5.2 Pro | Website 2 APK Builder (With App Bundle .aab support) 官方文档:入门 |文档 - 网站 2 APK 生成器 (websitetoa…

单链表算法经典OJ题

目录 1、移除链表元素 2、翻转链表 3、合并两个有序链表 4、获取链表的中间结点 5、环形链表解决约瑟夫问题 6、分割链表 1、移除链表元素 203. 移除链表元素 - 力扣(LeetCode) typedef struct ListNode LSNode; struct ListNode* remove…

AI原生时代,一场彻底的“智能”觉醒

【潮汐商业评论/原创】 “你用‘AI’工作过吗?” 这往往是Freya向别人吐槽的第一句。 在使用各种版本语言大模型的过程中,Freya与人工智能的交流往往就像两个相切的圆,有交集,但又好像没有,双方你问你的&#xff0c…

mysql同时使用order by排序和limit分页数据重复问题

目录 场景再现: 解决方案: 问题分析: mysql官方描述: 场景再现: 最近排查数据时发现使用order by及limit分页时会出现不同页数数据重复问题及有的数据分页不会显示,但是按条件搜索就可以搜索出来。 解决方案&#x…

软件评测师之操作系统基础知识

目录 一.操作系统的概述二.P、V、S机制(1)进程控制(2)原语(3)互斥(4)同步(5)临界资源(6)临界区 三.三态模型四.死锁五.进程资源图六.文件管理多级目录结构 七.存储管理1.页式存储2.段式存储3.段页式存储 一.操作系统的概述 作用:管理硬件资源,改善人机交…

2000-2022年上市公司CEO 高管及董事会环保背景数据(5W+ )(原始数据+处理代码Stata do文档)

2000-2022年上市公司CEO 高管及董事会环保背景数据(5W )(原始数据处理代码Stata do文档) 1、时间:2000-2022年 2、指标:证券代码、股票代码、年份、股票简称、ST或PT为1,否则为0、金融业为1&a…

并发容器(Map、List、Set)实战及其原理

一. JUC包下的并发容器 Java的集合容器框架中,主要有四大类别:List、Set、Queue、Map,大家熟知的这些集合类ArrayList、LinkedList、HashMap这些容器都是非线程安全的。 所以,Java先提供了同步容器供用户使用。 同步容器可以简单地…

【C++面向对象】2.构造函数、析构函数

文章目录 【 1. 构造函数 】1.1 带参构造函数--传入数据1.2 无参构造函数--不传入数据1.3 实例1.4 拷贝构造函数 【 2. 析构函数 】 【 1. 构造函数 】 类的构造函数是类的一种特殊的成员函数,它会 在每次创建类的新对象时执行。 构造函数的名称与类的名称是完全相同…

ARM可用的可信固件项目简介

安全之安全(security)博客目录导读 目录 一、TrustedFirmware-A (TF-A) 二、MCUboot 三、TrustedFirmware-M (TF-M) 四、TF-RMM 五、OP-TEE 六、Mbed TLS 七、Hafnium 八、Trusted Services 九、Open CI 可信固件为Armv8-A、Armv9-A和Armv8-M提供了安全软件的参考实现…