详解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 相关文章推荐
jQuery实现元素拖拽并cookie保存顺序的方法
Feb 20 Javascript
angularjs ui-router中路由的二级嵌套
Mar 10 Javascript
js Dom实现换肤效果
Oct 21 Javascript
浅谈es6语法 (Proxy和Reflect的对比)
Oct 24 Javascript
10 种最常见的 Javascript 错误(频率最高)
Feb 08 Javascript
JavaScript满天星导航栏实现方法
Mar 08 Javascript
JavaScript执行环境及作用域链实例分析
Aug 01 Javascript
vue+iview/elementUi实现城市多选
Mar 28 Javascript
Vue 实现前进刷新后退不刷新的效果
Jun 14 Javascript
JavaScript canvas实现跟随鼠标事件
Feb 10 Javascript
JavaScript检测浏览器是否支持CSS变量代码实例
Apr 03 Javascript
el-table表头根据内容自适应完美解决表头错位和固定列错位
Jan 07 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中定义网站根目录的常用方法
2010/08/08 PHP
php 随机排序广告的实现代码
2011/05/09 PHP
分享自定义的几个PHP功能函数
2015/04/15 PHP
微信公众平台开发(五) 天气预报功能开发
2016/12/03 PHP
thinkphp 字母函数详解T/I/N/D/M/A/R/U
2017/04/03 PHP
判断浏览器的javascript版本的代码
2010/09/03 Javascript
javascript学习笔记(四) Number 数字类型
2012/06/19 Javascript
JavaScript获取路径设计源码
2014/05/22 Javascript
JQuery限制复选框checkbox可选中个数的方法
2015/04/20 Javascript
深入解析JavaScript的闭包机制
2015/10/20 Javascript
js判断是否为空和typeof的用法(详解)
2016/10/07 Javascript
基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析
2017/01/12 NodeJs
详解前端构建工具gulpjs的使用介绍及技巧
2017/01/19 Javascript
Javascript继承机制详解
2017/05/30 Javascript
浅谈vue的踩坑路
2017/08/31 Javascript
解决npm管理员身份install时出现权限的问题
2018/03/16 Javascript
vue + any-touch实现一个iscroll 实现拖拽和滑动动画效果
2019/04/08 Javascript
vue 验证码界面实现点击后标灰并设置div按钮不可点击状态
2019/10/28 Javascript
JS实现悬浮球只在一侧滑动并且是横屏状态下
2020/08/19 Javascript
Python定时执行之Timer用法示例
2015/05/27 Python
python中__call__内置函数用法实例
2015/06/04 Python
简单讲解Python编程中namedtuple类的用法
2016/06/21 Python
如何在Python函数执行前后增加额外的行为
2016/10/20 Python
Python3 pywin32模块安装的详细步骤
2020/05/26 Python
Python Scrapy图片爬取原理及代码实例
2020/06/12 Python
详解python中的三种命令行模块(sys.argv,argparse,click)
2020/12/15 Python
html5仿支付宝密码框的实现代码
2017/09/06 HTML / CSS
HTML5中5个简单实用的API
2014/04/28 HTML / CSS
李维斯德国官方网上商店:Levi’s德国
2016/09/10 全球购物
事业单位接收函
2014/01/10 职场文书
知名企业招聘广告词大全
2014/03/18 职场文书
2015年个人自我剖析材料
2014/12/29 职场文书
销售会议开幕词
2015/01/28 职场文书
四年级语文教学反思
2016/03/03 职场文书
领导激励员工的演讲稿,各种会上用得到,建议收藏
2019/08/13 职场文书
Java实现添加条码或二维码到Word文档
2022/06/01 Java/Android