详解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 相关文章推荐
Javascript排序算法之合并排序(归并排序)的2个例子
Apr 04 Javascript
用js替换除数字与逗号以外的所有字符的代码
Jun 07 Javascript
JavaScript合并两个数组并去除重复项的方法
Jun 13 Javascript
JS实现搜索框文字可删除功能
Dec 28 Javascript
JS正则获取HTML元素的方法
Mar 31 Javascript
Angular2 父子组件数据通信实例
Jun 22 Javascript
jQuery实现html table行Tr的复制、删除、计算功能
Jul 10 jQuery
微信小程序使用progress组件实现显示进度功能【附源码下载】
Dec 12 Javascript
详解Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on
Oct 12 Javascript
微信小程序自定义可滑动日历界面
Dec 28 Javascript
React精髓!一篇全概括小结(急速)
May 23 Javascript
vuex实现购物车的增加减少移除
Jun 28 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+mysql来做一个功能强大的在线计算器
2010/10/12 PHP
PHP实现图片压缩的两则实例
2014/07/19 PHP
php命令行用法入门实例教程
2014/10/27 PHP
PHP自带ZIP压缩、解压缩类ZipArchiv使用指南
2015/03/03 PHP
Yii2 输出xml格式数据的方法
2016/05/03 PHP
php遍历替换目录下文件指定内容的方法
2016/11/10 PHP
PHP判断数组是否为空的常用方法(五种方法)
2017/02/08 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
2017/08/18 PHP
PHP结合Vue实现滚动底部加载效果
2017/12/17 PHP
PHP设计模式(六)桥连模式Bridge实例详解【结构型】
2020/05/02 PHP
Prototype PeriodicalExecuter对象 学习
2009/07/19 Javascript
jQuery 连续列表实现代码
2009/12/21 Javascript
js/jquery解析json和数组格式的方法详解
2014/01/09 Javascript
jquery实现简单手风琴菜单效果实例
2015/06/13 Javascript
jQuery实现ctrl+enter(回车)提交表单
2015/10/19 Javascript
jQuery Easyui 验证两次密码输入是否相等
2016/05/13 Javascript
JS模仿腾讯图片站的图片翻页按钮效果完整实例
2016/06/21 Javascript
浅谈js对象属性 通过点(.) 和方括号([]) 的不同之处
2016/10/29 Javascript
使用微信小程序开发前端【快速入门】
2016/12/05 Javascript
元素全屏的设置与监听实例
2017/11/28 Javascript
Vue官方推荐AJAX组件axios.js使用方法详解与API
2018/10/09 Javascript
vue 开发之路由配置方法详解
2019/12/02 Javascript
Python使用wget实现下载网络文件功能示例
2018/05/31 Python
使用Python完成15位18位身份证的互转功能
2019/11/06 Python
HTML5 绘制图像(上)之:关于canvas元素引领下一代web页面的问题
2013/04/24 HTML / CSS
职业技术学校毕业生推荐信
2013/12/03 职场文书
省级青年文明号申报材料
2014/05/23 职场文书
2014年服装销售工作总结
2014/11/27 职场文书
初三毕业评语
2014/12/26 职场文书
2015年为民办实事工作总结
2015/05/26 职场文书
大学生入党群众意见书
2015/06/02 职场文书
理想国读书笔记
2015/06/25 职场文书
2016年小学“我们的节日·中秋节”活动总结
2016/04/05 职场文书
请学会珍惜眼前,因为人生没有下辈子!
2019/11/12 职场文书
Python读取和写入Excel数据
2022/04/20 Python
clear 万能清除浮动(clearfix:after)
2023/05/21 HTML / CSS