详解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 相关文章推荐
Ajax请求在数据量大的时候出现超时的解决方法
Feb 27 Javascript
巧用replace将文字表情替换为图片
Apr 17 Javascript
无限树Jquery插件zTree的常用功能特性总结
Sep 11 Javascript
JavaScript的React框架中的JSX语法学习入门教程
Mar 05 Javascript
jQuery实现将div中滚动条滚动到指定位置的方法
Aug 10 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
Jul 03 Javascript
基于JavaScript实现弹幕特效
Aug 27 Javascript
Vue组件之全局组件与局部组件的使用详解
Oct 09 Javascript
微信小程序实现分享到朋友圈功能
Jul 19 Javascript
JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例
Jan 29 Javascript
利用Electron简单撸一个Markdown编辑器的方法
Jun 10 Javascript
JavaScript常用8种数组去重代码实例
Sep 09 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
PDO版本问题 Invalid parameter number: no parameters were bound
2013/01/06 PHP
关于svn冲突的解决方法
2013/06/21 PHP
PHP 与 UTF-8 的最佳实践详细介绍
2017/01/04 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
PHP校验15位和18位身份证号的类封装
2018/11/07 PHP
Nigma vs Liquid BO3 第二场2.14
2021/03/10 DOTA
javascript 四则运算精度修正函数代码
2010/05/31 Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
2013/05/08 Javascript
用JS实现3D球状标签云示例代码
2013/12/01 Javascript
JavaScript中匿名函数的用法及优缺点详解
2016/06/01 Javascript
利用Javascript仿Excel的数据透视分析功能
2016/09/07 Javascript
Node.js如何使用Diffie-Hellman密钥交换算法详解
2017/09/05 Javascript
详解如何在项目中使用jest测试react native组件
2018/02/09 Javascript
jQuery--遍历操作实例小结【后代、同胞及过滤】
2020/05/22 jQuery
学习python (1)
2006/10/31 Python
浅谈Python中的zip()与*zip()函数详解
2018/02/24 Python
python递归实现快速排序
2018/08/18 Python
使用Python批量修改文件名的代码实例
2019/01/24 Python
django的settings中设置中文支持的实现
2019/04/28 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
2019/10/11 Python
python对象转字典的两种实现方式示例
2019/11/07 Python
python中dict()的高级用法实现
2019/11/13 Python
python网络编程之五子棋游戏
2020/05/14 Python
TensorFlow-gpu和opencv安装详细教程
2020/06/30 Python
解决Python 函数声明先后顺序出现的问题
2020/09/02 Python
Python 实现一个简单的web服务器
2021/01/03 Python
一套英文Java笔试题面试题
2016/04/21 面试题
初入社会应届生求职信
2013/11/18 职场文书
护理专业学生职业生涯规划范文
2014/03/11 职场文书
保护环境倡议书300字
2014/05/19 职场文书
会计系毕业生求职信
2014/05/28 职场文书
房地产经营管理专业自荐信
2014/09/02 职场文书
当幸福来敲门英文观后感
2015/06/01 职场文书
2019思想汇报范文
2019/05/21 职场文书
2019学校请假条格式及范文
2019/06/25 职场文书
Golang 正则匹配效率详解
2021/04/25 Golang