JavaScript超长数字问题总结

最近在做项目的时候 遇到2个超长数字的问题 在这里总结下

  • 问题一: app里的内嵌h5页面, IOS系统,超长数字颜色会变成蓝色

在iPhone 手机上默认值是(电话号码显示为拨号的超链接)

<meta name="format-detection" content="telephone=yes"/>

可将telephone=no,则手机号码不被显示为拨号链接

<meta name="format-detection" content="telephone=no"/>
  • 问题二: JavaScript 里最大的安全的整数2的53次方减一
    先说下问题:后端接口吐给前端一个sku字段, 字段类型为long ,值是29265918525710373,在特定场景下,需要前端回传这个字段给后端,这时后端收的是29265918525710374 而不是 29265918525710373 ,
    可以看到 最后一位发生的变化,
    导致问题的原因是,超长数据精确度出了问题,因为JavaScript 里最大的安全的整数2的53次方减一,
    解决这个问题的方法,是后端接口修改sku字段为string,前端传串,就可以避免这种问题的发生了。

那么问题来了,JavaScript 里最大的安全的整数为什么是2的53次方减一(点击查看原文)

整数存在64位浮点数的52位尾数里面,难道不应该是2的52次方减一吗?
根据浮点数的存储原理,整数位第一位肯定是1,所以这个第一位就可以省略掉。因此多出了1位。这并不是JS特有的性质,而是IEEE754双精度浮点数就是这么定义的。

“安全”意思是说能够one-by-one表示的整数,也就是说在(-2^53, 2^53)范围内,双精度数表示和整数是一对一的,反过来说,在这个范围以内,所有的整数都有唯一的浮点数表示,这叫做安全整数。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值