详解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加密解密7种方法总结分析
Oct 07 Javascript
javascript中的undefined 与 null 的区别  补充篇
Mar 17 Javascript
jQuery EasyUI API 中文文档 - TreeGrid 树表格使用介绍
Nov 21 Javascript
js获取控件位置以及不同浏览器中的差别介绍
Aug 08 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
Nov 22 Javascript
JavaScript实现的双向跨域插件分享
Jan 31 Javascript
js和jquery分别验证单选框、复选框、下拉框
Dec 17 Javascript
JS设置下拉列表框当前所选值的方法
Dec 22 Javascript
jQuery属性选择器用法示例
Sep 09 Javascript
JS正则表达式验证账号、手机号、电话和邮箱是否合法
Mar 08 Javascript
JS原生带缩略图的图片切换效果
Oct 10 Javascript
arcgis.js控制地图地体的显示范围超出区域自动弹回(实现思路)
Jan 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 array的学习笔记
2012/05/10 PHP
PHP+AJAX实现投票功能的方法
2015/09/28 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
2016/08/19 PHP
详解PHP中的外观模式facade pattern
2018/02/05 PHP
另类调用flash无须激活的方法
2006/12/27 Javascript
JQuery里选择超链接的实现代码
2011/05/22 Javascript
(跨浏览器基础事件/浏览器检测/判断浏览器)经验代码分享
2013/01/24 Javascript
js设置控件的隐藏与显示的两种方法
2014/08/21 Javascript
jQuery中detach()方法用法实例
2014/12/25 Javascript
Javascript访问器属性实例分析
2014/12/30 Javascript
Javascript核心读书有感之表达式和运算符
2015/02/11 Javascript
jQuery对JSON数据进行排序输出的方法
2015/06/24 Javascript
JavaScript继承学习笔记【新手必看】
2016/05/10 Javascript
基于Bootstrap实现图片轮播效果
2016/05/22 Javascript
浅谈js在html中的加载执行顺序,多个jquery ready执行顺序
2016/11/26 Javascript
ThinkPHP+jquery实现“加载更多”功能代码
2017/03/11 Javascript
基于 webpack2 实现的多入口项目脚手架详解
2017/06/26 Javascript
Vue打包后访问静态资源路径问题
2019/11/08 Javascript
python Django连接MySQL数据库做增删改查
2013/11/07 Python
python中django框架通过正则搜索页面上email地址的方法
2015/03/21 Python
利用Python实现简单的相似图片搜索的教程
2015/04/23 Python
python实现批量下载新浪博客的方法
2015/06/15 Python
flask session组件的使用示例
2018/12/25 Python
python-itchat 获取微信群用户信息的实例
2019/02/21 Python
Django的用户模块与权限系统的示例代码
2019/07/24 Python
Python 无限级分类树状结构生成算法的实现
2021/01/21 Python
国外平面设计素材网站:The Hungry JPEG
2017/03/28 全球购物
新加坡交友网站:be2新加坡
2019/04/10 全球购物
女方回门宴答谢词
2014/01/14 职场文书
幼儿园教师教学反思
2014/02/06 职场文书
竞选村长演讲稿
2014/04/28 职场文书
2014教师研修学习体会
2014/07/08 职场文书
2014教师年度思想工作总结
2014/11/10 职场文书
2014年综合治理工作总结
2014/11/20 职场文书
股东大会通知
2015/04/24 职场文书
win10电脑老是死机怎么办?win10系统老是死机的解决方法
2022/08/05 数码科技