详解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 相关文章推荐
网页里控制图片大小的相关代码
Jun 25 Javascript
js tab 选项卡
Apr 26 Javascript
jQuery使用技巧简单汇总
Apr 18 Javascript
解析使用JS 清空File控件的路径值
Jul 08 Javascript
jQuery实现可关闭固定于底(顶)部的工具条菜单效果
Nov 06 Javascript
为你的微信小程序体积瘦身详解
May 20 Javascript
js自定义trim函数实现删除两端空格功能
Feb 09 Javascript
vue实现简单loading进度条
Jun 06 Javascript
微信小程序wx:for循环的实例详解
Oct 07 Javascript
小试SVG之新手小白入门教程
Jan 08 Javascript
JavaScript语法约定和程序调试原理解析
Nov 03 Javascript
微信小程序轮播图swiper代码详解
Dec 01 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
windows中为php安装mongodb与memcache
2015/01/06 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
2015/12/29 PHP
Zend Framework常用校验器详解
2016/12/09 PHP
PHP利用curl发送HTTP请求的实例代码
2020/07/09 PHP
jQuery 1.3 和 Validation 验证插件1.5.1
2009/07/09 Javascript
浅谈JavaScript函数参数的可修改性问题
2013/12/05 Javascript
使用FlexiGrid实现Extjs表格效果方法分享
2014/12/16 Javascript
jQuery中scrollLeft()方法用法实例
2015/01/16 Javascript
jQuery ajax请求返回list数据动态生成input标签,并把list数据赋值到input标签
2016/03/29 Javascript
AngularJs Understanding the Controller Component
2016/09/02 Javascript
微信小程序之小豆瓣图书实例
2016/11/30 Javascript
es6系列教程_ Map详解以及常用api介绍
2017/09/25 Javascript
微信小程序用户授权、位置授权及获取微信绑定手机号
2019/07/18 Javascript
vue 取出v-for循环中的index值实例
2019/11/09 Javascript
微信小程序自定义联系人弹窗
2020/05/26 Javascript
[01:06:26]全国守擂赛第二周 Team Coach vs DeMonsTer
2020/04/28 DOTA
[59:00]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第一场 3月7日
2021/03/11 DOTA
python操作redis的方法
2015/07/07 Python
Django中传递参数到URLconf的视图函数中的方法
2015/07/18 Python
解决python文件字符串转列表时遇到空行的问题
2017/07/09 Python
遗传算法python版
2018/03/19 Python
Python中str.join()简单用法示例
2018/03/20 Python
对pandas写入读取h5文件的方法详解
2018/12/28 Python
python实现对图片进行旋转,放缩,裁剪的功能
2019/08/07 Python
Python实现验证码识别
2020/06/15 Python
Python获取android设备cpu和内存占用情况
2020/11/15 Python
python3 通过 pybind11 使用Eigen加速代码的步骤详解
2020/12/07 Python
使用python实现学生信息管理系统
2021/02/25 Python
在网上学习全世界最好的课程:Coursera
2017/11/07 全球购物
英国女性时尚鞋类的潮流制造者:Koi Footwear
2018/10/19 全球购物
如何判断计算机可能已经中马
2013/03/22 面试题
2014年销售工作总结范文
2014/12/01 职场文书
杭白菊导游词
2015/02/10 职场文书
春晚观后感
2015/06/11 职场文书
基于PostgreSQL/openGauss 的分布式数据库解决方案
2021/12/06 PostgreSQL
一文了解MySQL二级索引的查询过程
2022/02/24 MySQL