详解JavaScript中精度失准问题及解决方法


Posted in Javascript onFebruary 04, 2020

首先来看一下JavaScript中的数字类型的存储情况

①JS中所有的数字(小数、整型)都是浮点型
②JS中小数、整型都是Number类型
③JS中Number类型使用binary64或双精度表示的,实质是一个二进制格式64位的浮点数
④64位的二进制具体为最高的1位是符号位,接着的11位是指数,剩下的52位为有效数字
⑤符号位决定了一个数的正负,指数部分决定了数值的大小,小数部分决定了数值的精度,因此,JavaScript提供的有效

数字最长为53个二进制位(64位浮点的后52位+有效数字第一位的1)

详解JavaScript中精度失准问题及解决方法

知道Number的具体存储特征后,我们再来分析一下小数精度丢失的原因

小数进行算术运算时,实质上就是把十进制的浮点数转化为二进制,这样的结果是无穷的,JS最多有2的53次方有效数字,并不是精准的,所以再进行运算时会失准

那么JS可以存储最大的数字和最大安全数字是什么呢?可以使用Number的属性进行表示

JS存储最大值:Number.Max_VALUE()
JS最大安全值:Number.Max_SAFE_INTERGER(),即2的53次方

最后看一下处理大数字(超出范围)的方法及避免精度丢失的方法

避免精度丢失方法:toFixed()方法,先进行四舍五入取有效的小数位数,然后使用parseFloat()返回浮点数
处理大数字的方法:
①使用big-integer处理大数
②将数字变为字符串进行处理

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS 对象介绍
Jan 20 Javascript
jquery 查找select ,并触发事件的实现代码
Mar 30 Javascript
拉动滚动条加载数据的jquery代码
May 03 Javascript
JS中三目运算符和if else的区别分析与示例
Nov 21 Javascript
JQuery动态添加和删除表格行的方法
Mar 09 Javascript
Bootstrap Metronic完全响应式管理模板之菜单栏学习笔记
Jul 08 Javascript
Augularjs-起步详解
Jul 08 Javascript
微信小程序 Page()函数详解
Oct 17 Javascript
微信小程序 获取当前地理位置和经纬度实例代码
Dec 05 Javascript
vue.js2.0 实现better-scroll的滚动效果实例详解
Aug 13 Javascript
qrcode生成二维码微信长按无法识别问题的解决
Apr 04 Javascript
详解ng-alain动态表单SF表单项设置必填和正则校验
Jun 11 Javascript
Preload基础使用方法详解
Feb 03 #Javascript
使用PreloadJS加载图片资源的基础方法详解
Feb 03 #Javascript
使用preload预加载页面资源时注意事项
Feb 03 #Javascript
jQuery实现小火箭返回顶部特效
Feb 03 #jQuery
JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
Feb 03 #Javascript
微信小程序实现上传多个文件 超过10个
Mar 30 #Javascript
微信小程序实现同时上传多张图片
Feb 03 #Javascript
You might like
PHP字符串 ==比较运算符的副作用
2009/10/21 PHP
php在页面中调用fckeditor编辑器的方法
2011/06/10 PHP
实例讲解YII2中多表关联的使用方法
2017/07/21 PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
2017/08/01 PHP
JavaScript 异步调用框架 (Part 2 - 用例设计)
2009/08/03 Javascript
js 鼠标拖动对象 可让任何div实现拖动效果
2009/11/09 Javascript
js Date自定义函数 延迟脚本执行
2010/03/10 Javascript
JavaScript弹出窗口方法汇总
2014/08/12 Javascript
简介JavaScript中setUTCSeconds()方法的使用
2015/06/12 Javascript
React.js入门学习第一篇
2016/03/30 Javascript
原生js实现百叶窗效果及原理介绍
2016/04/12 Javascript
jQuery中 bind的用法简单介绍
2017/02/13 Javascript
Bootstrap表单使用方法详解
2017/02/17 Javascript
nodejs开发——express路由与中间件
2017/03/24 NodeJs
js实现随机数字字母验证码
2017/06/19 Javascript
js is_valid_filename验证文件名的函数
2017/07/19 Javascript
js canvas实现简单的图像扩散效果
2020/06/28 Javascript
Vue多系统切换实现方案
2018/06/05 Javascript
详解react-refetch的使用小例子
2019/02/15 Javascript
NodeJS http模块用法示例【创建web服务器/客户端】
2019/11/05 NodeJs
vue-video-player 解决微信自动全屏播放问题(横竖屏导致样式错乱问题)
2020/02/25 Javascript
vue在线动态切换主题色方案
2020/03/26 Javascript
jQuery实现简单飞机大战
2020/07/05 jQuery
浅谈Vue static 静态资源路径 和 style问题
2020/11/07 Javascript
[01:36:17]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第一场 1月31日
2021/03/11 DOTA
Python的ORM框架中SQLAlchemy库的查询操作的教程
2015/04/25 Python
Pandas GroupBy对象 索引与迭代方法
2018/11/16 Python
Python给图像添加噪声具体操作
2019/03/03 Python
Python实现简单层次聚类算法以及可视化
2019/03/18 Python
Django框架自定义session处理操作示例
2019/05/27 Python
python多线程并发及测试框架案例
2019/10/15 Python
Melijoe时尚童装德国官网:Melijoe德国
2016/09/03 全球购物
Linux内核的同步机制是什么?主要有哪几种内核锁
2016/07/11 面试题
小学教师先进事迹材料
2014/12/15 职场文书
廉政承诺书
2015/01/19 职场文书
用Python简陋模拟n阶魔方
2021/04/17 Python