详解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 相关文章推荐
再谈IE中Flash控件的自动激活 ObjectWrap
Mar 09 Javascript
jquery 图片轮换效果
Jul 29 Javascript
fancybox1.3.1 基于Jquery的插件在IE中图片显示问题
Oct 01 Javascript
jQuery基本过滤选择器使用介绍
Apr 18 Javascript
js判断屏幕分辨率的代码
Jul 16 Javascript
jQuery中animate用法实例分析
Mar 09 Javascript
javascript框架设计之框架分类及主要功能
Jun 23 Javascript
javascript self对象使用详解
Oct 18 Javascript
JS实现根据用户输入分钟进行倒计时功能
Nov 14 Javascript
JS实现上传图片的三种方法并实现预览图片功能
Jul 14 Javascript
vue实现文章内容过长点击阅读全文功能的实例
Dec 28 Javascript
bootstrap动态调用select下拉框的实例代码
Aug 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
一个PHP的String类代码
2010/04/20 PHP
ThinkPHP之import方法实例详解
2014/06/20 PHP
php基于base64解码图片与加密图片还原实例
2014/11/03 PHP
十大使用PHP框架的理由
2015/09/26 PHP
php微信开发之百度天气预报
2016/11/18 PHP
PHP简单实现合并2个数字键数组值的方法
2017/05/30 PHP
php7基于递归实现删除空文件夹的方法示例
2017/06/15 PHP
PHP截取发动短信内容的方法
2017/07/04 PHP
Laravel5.5以下版本中如何自定义日志行为详解
2018/08/01 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
2018/12/21 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
为什么Node.js会这么火呢?Node.js流行的原因
2014/12/01 Javascript
javascript实现Table排序的方法
2015/05/15 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
获取JavaScript异步函数的返回值
2016/12/21 Javascript
Javascript中常用类型的格式化方法小结
2016/12/26 Javascript
Vue数据驱动模拟实现4
2017/01/12 Javascript
js 作用域和变量详解
2017/02/16 Javascript
详解Vue使用命令行搭建单页面应用
2017/05/24 Javascript
深入理解Vue transition源码分析
2017/07/30 Javascript
jQuery实现的手动拖动控制进度条效果示例【测试可用】
2018/04/18 jQuery
Vue表单类的父子组件数据传递示例
2018/05/03 Javascript
Vue.js特性Scoped Slots的浅析
2019/02/20 Javascript
JavaScript Blob对象原理及用法详解
2020/10/14 Javascript
深入了解Vue3模板编译原理
2020/11/19 Vue.js
[02:15]2014DOTA2国际邀请赛 赛后退役选手回顾
2014/08/01 DOTA
Python基础之函数用法实例详解
2014/09/10 Python
python代码 FTP备份交换机配置脚本实例解析
2019/08/01 Python
Keras自动下载的数据集/模型存放位置介绍
2020/06/19 Python
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2016/01/06 面试题
高中政治教学反思
2014/01/18 职场文书
机电一体化求职信
2014/03/10 职场文书
经典的毕业生自荐信范文
2014/04/14 职场文书
诉前财产保全担保书
2014/05/20 职场文书
战友聚会策划方案
2014/06/13 职场文书
CSS3 制作的悬停缩放特效
2021/04/13 HTML / CSS