当前位置: 首页 > news >正文

东莞高端网站设计西安关键词seo

东莞高端网站设计,西安关键词seo,凯里州建公司简介,做私彩网站我们首先要了解的事,JavaScript 中的数字按照 IEEE 754 的标准,使用 64 位双精度浮点型来表示。其中符号位 S,指数位 E,尾数位M分别占了 1,11,52 位,并且在ES5规范中指出了指数位E的取值范围是 …

我们首先要了解的事,JavaScript 中的数字按照 IEEE 754 的标准,使用 64 位双精度浮点型来表示。其中符号位 S,指数位 E,尾数位M分别占了 1,11,52 位,并且在ES5规范中指出了指数位E的取值范围是 [-1074, 971]。

我们如果想用有限的位来表示无穷的数字,显然是不可能的,因此会出现一些列精度问题,如下:

  • 浮点数精度问题,比如 0.1 + 0.2 !== 0.3
  • 大数精度问题,比如 9999 9999 9999 9999 == 1000 0000 0000 0000 1
  • toFixed 四舍五入结果不准确,比如 1.335.toFixed(2) == 1.33

浮点数精度和 toFixed 其实属于同一类问题,都是由于浮点数无法精确表示引起的,如下:

(1.335).toPrecision(20);    // "1.3349999999999999645"

而关于大数精度问题,我们可以先看下面这个代码片段:

// 能精确表示的整数范围上限,S为1个0,E为11个0,S为53个1
Math.pow(2, 53) - 1 === Number.MAX_SAFE_INTEGER    // true
// 能精确表示的整数范围下限,S为1个1,E为11个0,S为53个1
-(Math.pow(2, 53) - 1) === Number.MIN_SAFE_INTEGER    // true
// 能表示的最大数字,S为1个0,E为971,S为53个1
(Math.pow(2, 53) - 1) * Math.pow(2, 971) === Number.MAX_VALUE    // true
// 能表示的最接近于0的正数,S为1个0,E为-1074,S为0
Math.pow(2, -1074) === Number.MIN_VALUE // true

通过以上可以明白,[MIN_SAFE_INTEGER, MAX_SAFE_INTEGER] 的整数都可以精确表示,但是超出这个范围的整数就不一定能精确表示。这样就会产生所谓的大数精度丢失问题。

问题到这里已经罗列出来了,那我们咋滴搞一哈子嘞。

首先考虑的是如何解决浮点数运算的精度问题,有 3 种思路:

  • 考虑到每次浮点数运算的偏差非常小(其实不然),可以对结果进行指定精度的四舍五入,比如可以parseFloat(result.toFixed(12));
  • 将浮点数转为整数运算,再对结果做除法。比如0.1 + 0.2,可以转化为(1*2)/3
  • 把浮点数转化为字符串,模拟实际运算的过程。

我们先来看第一种方案,在大多数情况下,它可以得到正确结果,但是对一些极端情况,toFixed 到 12 是不够的,比如:

210000 * 10000  * 1000 * 8.2    // 17219999999999.998
parseFloat(17219999999999.998.toFixed(12));    // 17219999999999.998,而正确结果为 17220000000000

上面的情况,如果想让结果正确,需要 toFixed(2),这显然是不可接受的。

再看第二种方案,比如number-precision这个库就是使用的这种方案,但是这也是有问题的,比如:

// 这两个浮点数,转化为整数之后,相乘的结果已经超过了 MAX_SAFE_INTEGER
123456.789 * 123456.789     // 转化为 (123456789 * 123456789)/1000000,结果是 15241578750.19052

这个number-precision库的下载地址在这里:https://github.com/nefe/number-precision

综上所述嘞,我们最终考虑使用第三种方案,目前已经有了很多较为成熟的库,比如 bignumber.js,decimal.js,以及big.js等。我们可以根据自己的需求来选择对应的工具。并且,这些库不仅解决了浮点数的运算精度问题,还支持了大数运算,并且修复了原生toFixed结果不准确的问题。

所以嘞,我们来总结性的看下,产生浮点数计算精度不准确的原因: 在计算机角度,计算机算的是二进制,而不是十进制。二进制后变成了无线不循环的数,而计算机可支持浮点数的小数部分可支持到52位,所有两者相加,在转换成十进制,得到的数就不准确了,加减乘除运算原理一样。

咱这里罗列出三个网上找的方案大家可以参考下:

1、通过 toFixed(num) 方法来保留小数。因为这个方法是根据四舍五入来保留小数的,所以最后的计算结果不精确:

(1.0-0.9).toFixed(digits)  // toFixed() 精度参数须在 0 与20 之间(digits是精确的小数点后的位数) 
parseFloat((1.0-0.9).toFixed(10)) === 0.1 // 结果为True 
parseFloat((1.0-0.8).toFixed(10)) === 0.2 // 结果为True 
parseFloat((1.0-0.7).toFixed(10)) === 0.3 // 结果为True 
parseFloat((11.0-11.8).toFixed(10)) === -0.8 // 结果为True 
parseFloat((2.22 + 0.1).toFixed(10)) ===2.23 //结果为True 

2、把要计算的数字升级(乘以10的n次幂)成计算机能够精确识别的整数,计算完以后再降级。

3、Math.floor( xxx * 10 ) / 10 // 精确到小数点后一位:

1.11*10 
11.100000000000001 //精度不准确 
Math.floor(1.11*10)/10 // 精确到小数点后一位 
1.1 

好啦,本次记录就到这里了。

如果感觉不错的话,请多多点赞支持哦。。。

http://www.lbrq.cn/news/2544103.html

相关文章:

  • 网站建设微信公众号小程序app关键词排名优化公司推荐
  • 空投糖果网站开发市场调研公司排名
  • 海天建设集团公司网站电商网站对比
  • 电商网站建设网站推广的方法有哪些
  • 温州网站设计制作打开百度一下的网址
  • ps网站参考线怎么做西安网站seo哪家公司好
  • wordpress 几天前seo怎么去优化
  • wordpress忘记管理员密码福建seo
  • 重庆企业建站系统模板十大经典案例
  • 校园网站界面建设百度指数排行榜
  • iis配置网站无法浏览seo优化与品牌官网定制
  • WordPress多条件搜索常用的seo工具推荐
  • 如何做网站创业2022年网络流行语
  • 宝塔建站工具搜狗链接提交入口
  • wordpress仿站视频最近的疫情情况最新消息
  • 中网的官方网站免费网站友情链接
  • 租房网站开发功能需求时事新闻
  • 十堰英文网站建设网络优化大师手机版
  • 哪有做网站推广广州顶正餐饮培训学校
  • asp.net网站建设实战 pdf山东企业网站建设
  • 怎麽用dw做网站轮播海报怎么制作自己的网站网页
  • 北京网站建设公司费用浩森宇特怎么把平台推广出去
  • 大庆做流产油城女子网站seo薪酬
  • 山东网站建设哪家专业长春seo优化企业网络跃升
  • 永州企业网站开发百度排名优化软件
  • 做摄影和后期的兼职网站青岛百度竞价
  • 广东衍发建设管理有限公司公司网站搜索引擎营销的主要模式
  • 网站收录代做传统营销与网络营销的整合方法
  • 行业网站做不下去免费建站建站abc网站
  • 网站上图片可以做商业作品吗淘宝推广
  • [12月考试] E
  • 大语言模型(LLM)技术架构与工程实践:从原理到部署
  • 如何编写好的测试用例?
  • 智能编队重构职场生态:Agentic AI 协同时代来临
  • Arduino与STM32:初学者该如何选择?
  • Leetcode 3629. Minimum Jumps to Reach End via Prime Teleportation