详解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 相关文章推荐
ExtJS 2.0实用简明教程 之Ext类库简介
Apr 29 Javascript
js实现使用鼠标拖拽切换图片的方法
May 04 Javascript
jQuery团购倒计时特效实现方法
May 07 Javascript
jQuery代码实现对话框右上角菜单带关闭×
May 03 Javascript
jquery ajax局部加载方法详解(实现代码)
May 12 Javascript
JS集成fckeditor及判断内容是否为空的方法
May 27 Javascript
jQuery实现字符串全部替换的方法【推荐】
Mar 09 Javascript
ECMAScript6--解构
Mar 30 Javascript
JS仿淘宝搜索框用户输入事件的实现
Jun 19 Javascript
浅谈Vue数据响应思路之数组
Nov 06 Javascript
jQuery基于随机数解决中午吃什么去哪吃问题示例
Dec 29 jQuery
微信小程序实现日期格式化和倒计时
Nov 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
学习php笔记 字符串处理
2010/10/19 PHP
PHP读取文件内容后清空文件示例代码
2014/03/18 PHP
PHP遍历文件夹与文件类及处理类用法实例
2014/09/23 PHP
PHP执行linux命令常用函数汇总
2016/02/02 PHP
php实现JWT验证的实例教程
2020/11/26 PHP
javascript 广告后加载,加载完页面再加载广告
2010/11/25 Javascript
解析prototype,JQuery中跳出each循环的方法
2013/12/12 Javascript
用js正确判断用户名cookie是否存在的方法
2014/01/28 Javascript
JS简单操作select和dropdownlist实例
2014/11/26 Javascript
JS动态计算移动端rem的解决方案
2016/10/14 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
2016/12/09 Javascript
JavaScript字符串对象(string)基本用法示例
2017/01/18 Javascript
原生JS实现的自动轮播图功能详解
2018/12/28 Javascript
node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)
2019/04/10 Javascript
layui lay-verify form表单自定义验证规则详解
2019/09/18 Javascript
详解如何在JS代码中消灭for循环
2019/12/11 Javascript
JS校验与最终登陆界面功能完整示例
2020/01/13 Javascript
Postman如何实现参数化执行及断言处理
2020/07/28 Javascript
antd vue 刷新保留当前页面路由,保留选中菜单,保留menu选中操作
2020/08/06 Javascript
vue 在单页面应用里使用二级套嵌路由
2020/12/19 Vue.js
[13:40]TI3青蛙君全程回顾 DOTA2我们为梦想再战
2013/09/13 DOTA
Python实现的二维码生成小软件
2014/07/11 Python
Python引用传值概念与用法实例小结
2017/10/07 Python
python list是否包含另一个list所有元素的实例
2018/05/04 Python
djano一对一、多对多、分页实例代码
2019/08/16 Python
python爬虫模拟浏览器访问-User-Agent过程解析
2019/12/28 Python
Python字典实现伪切片功能
2020/10/28 Python
Linux系统下升级pip的完整步骤
2021/01/31 Python
好的演讲稿开场白
2013/12/30 职场文书
个人简历中自我评价
2014/02/11 职场文书
大学生作弊检讨书
2014/02/19 职场文书
节水倡议书范文
2014/04/15 职场文书
2015年世界卫生日活动总结
2015/02/09 职场文书
2015年五一劳动节慰问信
2015/03/23 职场文书
2015年销售工作总结范文
2015/03/30 职场文书
幼儿教师远程研修感悟
2015/11/18 职场文书