详解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点击按钮后弹出透明浮动层的方法
May 11 Javascript
javascript控制台详解
Jun 25 Javascript
jquery实现很酷的网页顶部图标下拉菜单效果
Aug 22 Javascript
微信企业号开发之微信考勤百度地图定位
Sep 11 Javascript
浅析javascript的return语句
Dec 15 Javascript
ES6记录异步函数的执行时间详解
Aug 31 Javascript
JavaScript数组和对象的复制
Mar 21 Javascript
ES6正则表达式扩展笔记
Jul 25 Javascript
JavaScript基础进阶之数组方法总结(推荐)
Sep 04 Javascript
JS实现瀑布流布局
Oct 21 Javascript
使用ef6创建oracle数据库的实体模型遇到的问题及解决方案
Nov 09 Javascript
layer设置maxWidth及maxHeight解决方案
Jul 26 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
用PHPdig打造属于你自己的Google[图文教程]
2007/02/14 PHP
探讨:如何通过stats命令分析Memcached的内部状态
2013/06/14 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
2014/11/18 PHP
PHP实现货币换算的方法
2014/11/29 PHP
js 新浪的一个图片播放图片轮换效果代码
2008/07/15 Javascript
InnerHtml和InnerText的区别分析
2009/03/13 Javascript
基于jQuery制作迷你背词汇工具
2010/07/27 Javascript
AspNet中使用JQuery上传插件Uploadify详解
2015/05/20 Javascript
jQuery中prepend()方法使用详解
2015/08/11 Javascript
jQuery实现响应鼠标滚动的动感菜单效果
2015/09/21 Javascript
AngularJS 服务详细讲解及示例代码
2016/08/17 Javascript
jQuery基于Ajax方式提交表单功能示例
2017/02/10 Javascript
基于JQuery及AJAX实现名人名言随机生成器
2017/02/10 Javascript
数组Array的一些方法(总结)
2017/02/17 Javascript
js数组方法reduce经典用法代码分享
2018/01/07 Javascript
详解处理bootstrap4不支持远程静态框问题
2018/07/20 Javascript
关于React动态加载路由处理的相关问题
2019/01/07 Javascript
详解一个基于react+webpack的多页面应用配置
2019/01/21 Javascript
Vuex mutitons和actions初使用详解
2019/03/04 Javascript
详解在React项目中安装并使用Less(用法总结)
2019/03/18 Javascript
手把手教你使用TypeScript开发Node.js应用
2019/05/06 Javascript
Python多线程编程(七):使用Condition实现复杂同步
2015/04/05 Python
Django实现学员管理系统
2019/02/26 Python
解决TensorFlow训练内存不断增长,进程被杀死问题
2020/02/05 Python
django 实现手动存储文件到model的FileField
2020/03/30 Python
Joules美国官网:出色的英国风格
2017/10/30 全球购物
Cole Haan官方网站:美国时尚潮流品牌
2017/12/06 全球购物
写给女生的道歉信
2014/01/14 职场文书
高中同学会活动方案
2014/08/14 职场文书
信用卡结清证明怎么写
2014/09/13 职场文书
数学教师个人工作总结
2015/02/06 职场文书
化验室岗位职责
2015/02/14 职场文书
借款民事起诉状范文
2015/05/19 职场文书
民间借贷纠纷答辩状
2015/08/03 职场文书
如何使用JavaScript策略模式校验表单
2021/04/29 Javascript
python opencv通过4坐标剪裁图片
2021/06/05 Python