详解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 相关文章推荐
iis6+javascript Add an Extension File
Jun 13 Javascript
Javascript打印网页部分内容的脚本
Nov 17 Javascript
javascript Excel操作知识点
Apr 24 Javascript
javascript中的变量是传值还是传址的?
Apr 19 Javascript
浅谈Javascript嵌套函数及闭包
Nov 09 Javascript
简单的代码实现jquery定时器
Nov 17 Javascript
javascript实现类似于新浪微博搜索框弹出效果的方法
Jul 27 Javascript
JS设置cookie、读取cookie
Feb 24 Javascript
jQuery实现div跟随鼠标移动
Aug 20 jQuery
bootstrap响应式工具使用详解
Nov 29 Javascript
浅谈vue 单文件探索
Sep 05 Javascript
JavaScript栈和队列相关操作与实现方法详解
Dec 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
论建造顺序的重要性
2020/03/04 星际争霸
WINDOWS 2000下使用ISAPI方式安装PHP
2006/09/05 PHP
Codeigniter实现智能裁剪图片的方法
2014/06/12 PHP
PHP 抽象方法与抽象类abstract关键字介绍及应用
2014/10/16 PHP
非常全面的php日期时间运算汇总
2015/11/04 PHP
PHP获取类私有属性的3种方法
2020/09/10 PHP
jquery仿京东导航/仿淘宝商城左侧分类导航下拉菜单效果
2013/04/24 Javascript
js去除空格的12种实用方法
2013/11/08 Javascript
判定是否原生方法的JS代码
2013/11/12 Javascript
分享两个手机访问pc网站自动跳转手机端网站代码
2020/12/24 Javascript
JavaScript返回上一页的三种方法及区别介绍
2015/07/04 Javascript
快速学习AngularJs HTTP响应拦截器
2015/12/31 Javascript
Js调用Java方法并互相传参的简单实例
2016/08/11 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
2016/12/02 Javascript
vue进入页面时滚动条始终在底部代码实例
2019/03/26 Javascript
微信小程序wepy框架学习和使用心得详解
2019/05/24 Javascript
CountUp.js实现数字滚动增值效果
2019/10/17 Javascript
零基础写python爬虫之抓取百度贴吧并存储到本地txt文件改进版
2014/11/06 Python
基于asyncio 异步协程框架实现收集B站直播弹幕
2016/09/11 Python
Python多层装饰器用法实例分析
2018/02/09 Python
Python 函数返回值的示例代码
2019/03/11 Python
使用Python进行体育竞技分析(预测球队成绩)
2019/05/16 Python
PyQt4 treewidget 选择改变颜色,并设置可编辑的方法
2019/06/17 Python
Pytorch Tensor 输出为txt和mat格式方式
2020/01/03 Python
Python局部变量与全局变量区别原理解析
2020/07/14 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
2020/11/17 Python
HTML5拖放API实现拖放排序的实例代码
2017/05/11 HTML / CSS
澳大利亚波希米亚风时尚品牌:Tree of Life
2019/09/15 全球购物
优秀士兵个人事迹材料
2014/01/19 职场文书
企业口号大全
2014/06/12 职场文书
中学清明节活动总结
2014/07/04 职场文书
幼儿园托班开学寄语(2015秋季)
2015/05/27 职场文书
军训新闻稿范文
2015/07/17 职场文书
网络营销实训总结
2015/08/03 职场文书
修辞手法有哪些?
2019/08/29 职场文书
vue css 相对路径导入问题级踩坑记录
2022/06/05 Vue.js