初探js中的精读问题

1.记得大学第一次学习计算机课,就接触了进制转换;例如,二进制转十进制,十进制转二进制等;例如对于十进制的整数,进行转二进制是没有什么问题的;但是对小数可能进制转换就会出现精读丢失的问题.

在 JavaScript 中所有数值都以 IEEE-754 标准的 64bit 双精度浮点数进行存储的。先来了解下 IEEE-754 标准下的双精度浮点数。

IEEE-754 标准下双精度浮点数由三部分组成,分别如下:

  • sign(符号): 占 1 bit,表示正负。

  • exponent(指数): 占 11 bit,表示范围。

  • mantissa(尾数): 占 52 bit,表示精度,多出的末尾如果是 1 需要进位。

 

 

JavaScript 的最大安全数是如何来的.

最大的安全数为 Math.pow(2,53)-1,即 9007199254740991

业务中碰到的精度问题以及解决方案

之前遇到后端的同事传递了long类型的订单号码过来,其中有写订单号码到了前端(会转为Number)显示和后端传递过来的不一致,才知道了有精读丢失的问题;

解决方案大致有以下几种:

  1. 针对大数的整数可以考虑使用 bigint 类型(目前在 stage 3 阶段)。

  2. 使用 bigNumber,它的思想是转化成 string 进行处理,这种方式对性能有一定影响。

  3. 可以考虑使用 long.js,它的思想是将 long 类型的值转化成两个 32 位的双精度类型的值。

 

暂时记录,后续完善

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值