详解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 相关文章推荐
showModelessDialog()使用详解
Sep 07 Javascript
JavaScript实现为指定对象添加多个事件处理程序的方法
Apr 17 Javascript
基于insertBefore制作简单的循环插空效果
Sep 21 Javascript
AngularJS中如何使用$http对MongoLab数据表进行增删改查
Jan 23 Javascript
jquery mobile 实现自定义confirm确认框效果的简单实例
Jun 17 Javascript
BetterScroll 在移动端滚动场景的应用
Sep 18 Javascript
解决vue页面刷新或者后退参数丢失的问题
Mar 13 Javascript
vuejs2.0运用原生js实现简单拖拽元素功能
Aug 21 Javascript
使用p5.js实现动态GIF图片临摹重现
Oct 23 Javascript
Typescript3.9 常用新特性一览(推荐)
May 14 Javascript
vue项目,代码提交至码云,iconfont的用法说明
Jul 30 Javascript
使用Typescript开发微信小程序的步骤详解
Jan 12 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使用PDO连接ACCESS数据库
2015/03/05 PHP
php获取远程文件大小
2015/10/20 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
JavaScript脚本性能的优化方法
2007/02/02 Javascript
支持ie与FireFox的剪切板操作代码
2009/09/28 Javascript
简洁短小的 JavaScript IE 浏览器判定代码
2010/03/21 Javascript
IE下使用cloneNode注意事项分享
2012/11/22 Javascript
使用node.js 获取客户端信息代码分享
2014/11/26 Javascript
jQuery中removeAttr()方法用法实例
2015/01/05 Javascript
jQuery+CSS实现的网页二级下滑菜单效果
2015/08/25 Javascript
JS中使用正则表达式g模式和非g模式的区别
2017/04/01 Javascript
vue2中filter()的实现代码
2017/07/09 Javascript
jQuery实现可编辑表格并生成json结果(实例代码)
2017/07/19 jQuery
JavaScript中数组常见操作技巧
2017/09/01 Javascript
详解AngularJS之$window窗口对象
2018/01/17 Javascript
JavaScript实现的贝塞尔曲线算法简单示例
2018/01/30 Javascript
bootstrap table插件动态加载表头
2019/07/19 Javascript
详解vue页面首次加载缓慢原因及解决方案
2019/11/06 Javascript
vue element-ul实现展开和收起功能的实例代码
2020/11/25 Vue.js
[54:10]完美世界DOTA2联赛PWL S2 Magma vs FTD 第二场 11.29
2020/12/03 DOTA
浅谈Python中用datetime包进行对时间的一些操作
2016/06/23 Python
Ruby元编程基础学习笔记整理
2016/07/02 Python
flask中主动抛出异常及统一异常处理代码示例
2018/01/18 Python
Python实现PS图像抽象画风效果的方法
2018/01/23 Python
对命令行模式与python交互模式介绍
2018/05/12 Python
浅谈pycharm出现卡顿的解决方法
2018/12/03 Python
django 实现将本地图片存入数据库,并能显示在web上的示例
2019/08/07 Python
python 实现手机自动拨打电话的方法(通话压力测试)
2019/08/08 Python
法国创作个性化T恤衫和其他定制产品平台:Tostadora
2018/04/08 全球购物
MyHeritage美国:家族史研究和DNA测试的领先服务
2019/05/27 全球购物
全球才华横溢工匠的家居装饰、珠宝和礼物:NOVICA
2021/01/22 全球购物
怎样写留学自荐信
2013/11/11 职场文书
旅游文化节策划方案
2014/06/06 职场文书
领导干部遵守党的政治纪律情况思想汇报
2014/09/14 职场文书
财政专业大学生职业生涯规划书
2014/09/17 职场文书
2015教师年度工作总结范文
2015/04/07 职场文书