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

做外汇的官方网站网站电脑版和手机版区别

做外汇的官方网站,网站电脑版和手机版区别,啄木鸟网站建设,wordpress自定义数据库1.js精度丢失的常见问题,从常见的浮点型进行计算,到位数很长的munber类型进行计算都会造成精度丢失的问题, 首先我们看一个问题: 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 result=124569875984123677888999;  //估摸着这一步就在前端已经精度丢失了
String(BigInt(result));let result=BigInt(124569875984123677888999);   //这里也已经精度丢失了
String(result);
// 上面两种都是错误的写法// 正确写法:
let result=124569875984123677888999n; 
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.111222233334444555566e+21"
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(2e+308)                     // 'Infinity'
new BigNumber(1e-324)                     // '0'// Precision loss from the unexpected result of arithmetic with Number values.
new BigNumber(0.7 + 0.1)                  // '0.7999999999999999'npm 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.yayakq.cn/news/214848/

相关文章:

  • 英文网站流量统计孩子学编程一年要多少钱
  • 整站seo设计开发流程图
  • 手机网站建设目标关于旅游的网站建设目的
  • 贵阳网站建设1685哈尔滨市建设工程信息网查询
  • 做电影网站被抓邢台网站建设公司排名
  • php网站服务建设软件开发项目报价模板
  • 如何更快的学习.net网站开发彩票网站什么做
  • 哪些网站可以做淘宝基础销量网站首页的尺寸
  • 营销网站和展示型网站网站刷新代码
  • 自己可以建个免费网站吗电商网站怎么做权限控制
  • 南宁做网站推广的公司哪家好网站怎么做关键字
  • 西安有一个电影他要拉投资做网站广州编程培训机构哪里好
  • 绵阳城乡住房建设厅网站嗯嗯嗯 嗯嗯嗯嗯嗯嗯哼哼哼哼哼哼这是什么歌英文的
  • 建设银行瓶窑支行网站深圳网站建设有没有市场
  • 网络舆情专业网站优化公司报价
  • 做手机app用什么软件2022最好的百度seo
  • c语言自学免费网站google官网
  • 名片在哪个网站做长沙企业建站程序
  • 青岛网站建设找个人在网站怎么做
  • 安宁网站建设 熊掌wordpress 新网页打开
  • 红酒企业网站模板建设网站的技术方案
  • 网站怎么做平台咖啡店网站模板
  • 广东建设网站首页设计网站排名
  • 微信推送用哪个网站做成品影视app下载有哪些软件
  • 网站建设沈阳凯鸿学wordpress难不难
  • 陕西网站开发公司大同网站建设制作哪家好
  • 门户网站开发注意事项黑糖wordpress主题破解
  • 自贡网站平台开发山东网站建设
  • 网站手机端做排名WordPress菜单过滤器
  • 网站关键词一般设置几个宁波跨境电商公司排名前十