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

北京专业响应式网站建设龙岗品牌网站建设

北京专业响应式网站建设,龙岗品牌网站建设,网站域名服务器,无锡市新区建设环保局网站1.js精度丢失的常见问题,从常见的浮点型进行计算#xff0c;到位数很长的munber类型进行计算都会造成精度丢失的问题#xff0c; 首先我们看一个问题#xff1a; 0.1 0.2 ! 0.3 // truelet a 9007199254740992 a 1 a // true那么js为什么会出现精度丢失的问题…1.js精度丢失的常见问题,从常见的浮点型进行计算到位数很长的munber类型进行计算都会造成精度丢失的问题 首先我们看一个问题 0.1 0.2 ! 0.3 // truelet a 9007199254740992 a 1 a // true那么js为什么会出现精度丢失的问题 计算机的二进制实现和位数限制有些数无法有限表示。就像一些无理数不能有限表示如 圆周率 3.1415926…1.3333… 等。JS 遵循 IEEE 754 规范采用双精度存储double precision占用 64 bit 比如 0.1 0.0001 1001 1001 1001…1001无限循环 0.2 0.0011 0011 0011 0011…0011无限循环 此时只能模仿十进制进行四舍五入了但是二进制只有 0 和 1 两个于是变为 0 舍 1 入。这即是计算机中部分浮点数运算时出现误差丢失精度的根本原因。 大整数的精度丢失和浮点数本质上是一样的尾数位最大是52位因此 JS 中能精准表示的最大整数是 Math.pow(2, 53)十进制即 9007199254740992。 大于 9007199254740992 的可能会丢失精度 9007199254740992 10000000000000…000 // 共计 53 个 0 9007199254740992 1 10000000000000…001 // 中间 52 个 0 9007199254740992 2 10000000000000…010 // 中间 51 个 0 当你做如下计算的时候 9007199254740992 1 // 丢失 9007199254740992 2 // 未丢失 9007199254740992 3 // 丢失 9007199254740992 4 // 未丢失 对于整数前端出现问题的几率可能比较低毕竟很少有业务需要需要用到超大整数只要运算结果不超过 Math.pow(2, 53) 就不会丢失精度。 对于小数前端出现问题的几率还是很多的尤其在一些电商网站涉及到金额等数据。解决方式把小数放到位整数乘倍数再缩小回原来倍数除倍数 // 0.1 0.2 (0.110 0.210) / 10 0.3 // true 对于过大的数字 可以用bigint应为number的基本类型不能超过2^53不然就会出现精度丢失为了解决这个限制在ECMAScript标准中出现了BigInt。 BigInt可以表示任意大的整数 但是要注意写法 let result124569875984123677888999; //估摸着这一步就在前端已经精度丢失了 String(BigInt(result))let resultBigInt(124569875984123677888999); //这里也已经精度丢失了 String(result) // 上面两种都是错误的写法// 正确写法 let result124569875984123677888999n; String(result);除了以上方式还可以借助第三方库 BigNumber.js提供了超高精度的数字处理能力可以解决精度丢失问题。 decimal.js提供了类似于 Python Decimal 的类型可以精确表示浮点数解决精度丢失问题。 npm install bignumber.js --savelet x new BigNumber(123.4567); let y BigNumber(123456.7e-3); let z new BigNumber(x); x.isEqualTo(y) y.isEqualTo(z) x.isEqualTo(z); // truelet x new BigNumber(1111222233334444555566); x.toString(); // 1.111222233334444555566e21 x.toFixed(); // 1111222233334444555566// Precision loss from using numeric literals with more than 15 significant digits. new BigNumber(1.0000000000000001) // 1 new BigNumber(88259496234518.57) // 88259496234518.56 new BigNumber(99999999999999999999) // 100000000000000000000// Precision loss from using numeric literals outside the range of Number values. new BigNumber(2e308) // Infinity new BigNumber(1e-324) // 0// Precision loss from the unexpected result of arithmetic with Number values. new BigNumber(0.7 0.1) // 0.7999999999999999npm install --save decimal.jsconst a 9.99;const b 8.03;// 加法let c new Decimal(a).add(new Decimal(b)) // 减法let d new Decimal(a).sub(new Decimal(b))// 乘法let e new Decimal(a).mul(new Decimal(b))// 除法let f new Decimal(a).div(new Decimal(b))
http://www.pierceye.com/news/411234/

相关文章:

  • 网站qq联系怎么做莲都区建设分局网站
  • 河南旅游集团 网站建设网络运营与推广
  • 搭建网站要多少钱龙岩融胤网络科技有限公司
  • 网站建设实训报告命名规范深圳外贸网站开发
  • 深圳好看的公司网站做网站 网络科技公司
  • wordpress可以建哪些网站吗网站建设从哪入手
  • 网站建设合同下载建站工具包
  • 阜宁网站建设服务商江苏网络公司网站建设
  • 网站语言切换功能如何做wordpress 茶业 主题
  • 南昌企业网站模板建站济南好的seo
  • 食品建设网站公司简介模板免费下载
  • 重庆网站推广运营公司非常酷的wordpress主题
  • 网站未备案被阻断怎么做中国大数据公司排名10强
  • 柳市网站优化茶叶怎么做网站销售
  • 燕郊网站建设公司什么叫动漫设计与制作
  • 瑞安做网站的公司专门做2次元图片的网站
  • 为什么自己做的网站老是404错误个人建设网站流程
  • 柳州网站建设找哪家好沈阳线上教学
  • 外贸网站免费建设做暖暖视频网站大全
  • 做机票在线预订网站手机版传奇发布网站
  • 网站建设 深圳 凡科站内推广
  • 南宁做网站外包公众号二次开发
  • 中国做网站最好的公司郑州网站建设目标
  • 各大网站平台发布信息企业官网模板免费源码
  • 第一次做网站怎么样下手威联通如何做网站
  • 网站有哪几种类型郑州建设信息网可以领证书吗
  • wordpress 百度网盘网站semseo先做哪个
  • 中企动力网站策划小程序开发平台软件
  • 做网站的公司创业泉州网页设计制作
  • 做网站一定要服务器吗做响应式网站