Skip to main content

moregeek program

#yyds干货盘点#JavaScript - 浮点数值-多极客编程


#yyds干货盘点#JavaScript - 浮点数值_ecmascript

浮点数,是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学计数法。

不过说的简单一点,所谓的浮点数就是包含了一个小数点,小数点后面必须至少有一个整数表示。虽然小数点前方可以没有数字,但是这样会降低可读性,并不推荐。

例如:

#yyds干货盘点#JavaScript - 浮点数值_科学计数法_02

当然数字也是有特别大的数值,一般情况下可以使用科学计数法,也就是用e表示。科学计数法实际使用起来也是非常简单的,实际使用的时候就是e前面的数值乘以10的指数次幂。在ECMAScript中的科学计数法使用起来也是如此,就算前面是整数或者浮点数都可以这样计算,科学计数法在使用起来不区分大小写,也就是E或者e都可以,后面是10的幂中的指数,使用该幂值与前面的数相乘即可。

例如:

#yyds干货盘点#JavaScript - 浮点数值_科学计数法_03

我们拿最后一个例子为例,使用e表示的3.3E2,实际数值为330,计算方式为“3.3乘以102”。

除了表示很大的数值,我们也可以利用科学计数法来表示特别小的数值,比如0.0005,我们就可以使用5e-4表示。不过在一般默认情况下,ECMAScript会将那些小数点后面带有6个零以上的浮点数值转化为科学计数法,也就是用e表示,这个状态是默认的,比如0.0000005会自动转化为5e-7的写法。

虽然浮点数很好,但是也有一个致命的争议问题,因为浮点数值的最高精度是17位小数,但在进行算数计算时其精度远远不如整数。例如最常出现问题的计算就是0.1加0.2了,结果并不是0.3,而是0.30000000000000004。这个问题也是JavaScript的浮点数误差会导致无法测试特定的浮点数值,这个问题归结起来是ECMAScript浮点数机制问题。

#yyds干货盘点#JavaScript - 浮点数值_科学计数法_04

上述例子中,我们测试到其和并不等于0.3。但是如果是0.05和0.25在或者是0.15都不会有问题。

原理是这样的,JavaScript内部采用的IEEE 754标准,number类型默认为双精度浮点型(64位),其实会有以下的问题:

1.首先我们都知道计算机内部存储是采用的二进制

2.将0.1转为二进制是无限循环小数,0.2也是无限循环小数

我们可以使用toString传入2的方法来获得数值的2进制,例如:

#yyds干货盘点#JavaScript - 浮点数值_科学计数法_05

大家可以看出来二进制所获的长度是非常长的,而浮动点位数会有限制,当长度溢出之后就会默认做截取,从上面的输出中可以看出0.1+0.2转成二进制后大于0.3直接转二进制.不光小数,而当整数部分溢出也会出现截取现象。所以就会诞生出来计算不准确的现象。

©著作权归作者所有:来自51CTO博客作者李游LEO的原创作品,请联系作者获取转载授权,否则将追究法律责任
#yyds干货盘点#JavaScript - 浮点数值
https://blog.51cto.com/u_7669561/4850983

《2w字大章 38道面试题》彻底理清JS中this指向问题 #yyds干货盘点#-多极客编程

前言 当一个函数调用时,会创建一个执行上下文,这个上下文包括函数调用的一些信息(调用栈,传入参数,调用方式),this就指向这个执行上下文。 this不是静态的,也并不是在编写的时候绑定的,而是在运行时绑定的。它的绑定和函数声明的位置没有关系,只取决于函数调用的方式。 本篇文章有点长,涉及到很多道面试题,有难有简单,如果能耐心的通读一编,我相信以后this都不成问题。 学习this之前,建议先

前端性能和加载体验优化实践(附:PWA、离线包、内存优化、预渲染)-多极客编程

一、背景:页面为何会卡? 1.1 等待时间长(性能) 项目本身包/第三方脚本比较大。 JavaScript 执行阻塞页面加载。 图片体积大且多。 特别是对于首屏资源加载中的白屏时间,用户等待的时间就越长,用户感知到页面的速度就越慢。麻省理工学院的 Richard Larson 在讲话中指出,“人类将被动等待高估了 36%”(https://mazey.cn/t/em)。这意味着用户感觉到的等待时

#私藏项目实操分享#前端开发:node.js的node包管理器npm安装以及使用-多极客编程

前言在前端开发过程中,node.js进行包管理的时候会使用npm管理器来操作。npm(node package manager)包管理器,主要是用于第三方模块的下载、安装和管理,它具有强大的第三方资源,重要程度不言而喻。一、npm安装npm安装步骤很简单,只用在终端里面输入一条命令行:apt-get isntall npm 回车,即可安装。1、验证是否安装成功安装npm之后,在终端输入运行命令行:

#私藏项目实操分享# Angular Change Detection 的学习笔记-多极客编程

Angular 变化检测机制比 AngularJs 中的等效机制更透明且更易于推理。但是在某些情况下(例如在进行性能优化时),我们确实需要知道幕后发生了什么。因此,让我们通过以下主题深入了解变更检测: 如何实施变更检测? Angular 变化检测器是什么样子的,我能看到吗? 默认的变更检测机制是如何工作的 打开/关闭更改检测,并手动触发它 避免变更检测循环:生产与开发模式 什么是OnPush变化检

VSCode撸猫插件vscode-cats它来了,一起来云撸猫吧 #yyds干货盘点#-多极客编程

前言 本月活动主题是代码吸猫,大约两周以前,我写了一篇如何给 VSCode 和个人网站添加 live2d 喵咪的博客,没想到得到了众多大佬的喜爱,但大佬们想要简单快乐的撸猫,给VSCode和网站领养喵咪 一起快乐撸猫 实现撸猫有几分繁琐,用户体验性不佳。 因此为了让众多大佬更舒服的撸猫,我将撸猫功能封装成 vscode-cats 插件,同时已经将 vscode-cats 0.0.1 成功发布在 V

#私藏项目实操分享# Angular @HostListener 装饰器的使用笔记-多极客编程

在 angular 中,通过不同的方式检测点击。 由于 click 是一个事件,因此在组件内部它是通过简单的事件绑定来检测的。 通过事件绑定在组件内进行检测的简单单击如下所示: @Component({ selector: "geeks", template: ` {{ some_text }} ` }) export class GeeksComponent { constructor() {}

《2w字大章 38道面试题》彻底理清JS中this指向问题 #yyds干货盘点#-多极客编程

前言 当一个函数调用时,会创建一个执行上下文,这个上下文包括函数调用的一些信息(调用栈,传入参数,调用方式),this就指向这个执行上下文。 this不是静态的,也并不是在编写的时候绑定的,而是在运行时绑定的。它的绑定和函数声明的位置没有关系,只取决于函数调用的方式。 本篇文章有点长,涉及到很多道面试题,有难有简单,如果能耐心的通读一编,我相信以后this都不成问题。 学习this之前,建议先

前端性能和加载体验优化实践(附:PWA、离线包、内存优化、预渲染)-多极客编程

一、背景:页面为何会卡? 1.1 等待时间长(性能) 项目本身包/第三方脚本比较大。 JavaScript 执行阻塞页面加载。 图片体积大且多。 特别是对于首屏资源加载中的白屏时间,用户等待的时间就越长,用户感知到页面的速度就越慢。麻省理工学院的 Richard Larson 在讲话中指出,“人类将被动等待高估了 36%”(https://mazey.cn/t/em)。这意味着用户感觉到的等待时

#私藏项目实操分享#前端开发:node.js的node包管理器npm安装以及使用-多极客编程

前言在前端开发过程中,node.js进行包管理的时候会使用npm管理器来操作。npm(node package manager)包管理器,主要是用于第三方模块的下载、安装和管理,它具有强大的第三方资源,重要程度不言而喻。一、npm安装npm安装步骤很简单,只用在终端里面输入一条命令行:apt-get isntall npm 回车,即可安装。1、验证是否安装成功安装npm之后,在终端输入运行命令行:

vue3 中 vue.config.js 修改端口 添加代理配置 #yyds干货盘点#-多极客编程

const { defineConfig } = require('@vue/cli-service')const AutoImport = require('unplugin-auto-import/webpack')const Components = require('unplugin-vue-components/webpack')const { ElementPlusResolver }

#私藏项目实操分享# Angular Change Detection 的学习笔记-多极客编程

Angular 变化检测机制比 AngularJs 中的等效机制更透明且更易于推理。但是在某些情况下(例如在进行性能优化时),我们确实需要知道幕后发生了什么。因此,让我们通过以下主题深入了解变更检测: 如何实施变更检测? Angular 变化检测器是什么样子的,我能看到吗? 默认的变更检测机制是如何工作的 打开/关闭更改检测,并手动触发它 避免变更检测循环:生产与开发模式 什么是OnPush变化检

#yyds干货盘点#学透CSS- :root + vm/vh 实现响应式字体!!!-多极客编程

创作不易,点个赞再看呗! 关注专栏,让你走进CSS世界的深处前言一个网页中最多的东西是啥? 正常人的第一反映肯定是文字,你要是跟我说是图片,那我只能表示:响应式网页设计中一个很难解决的问题就是文字的大小的问题了,面对千奇百怪的设备,如何解决文字的设配问题,是一个很重要的问题。 在上一篇文章[学透CSS-合理使用这8个单位,让你的网站Responsive]( https://juejin.cn/p