JavaScript 安全整数问题

 

前几天在用Extjs 做后台功能的时候 碰到了一个非常坑爹的问题。 

 有个值在控制器显示的是

但是一到页面渲染就会变成

 

垃圾的我一开始以为是溢出问题 但是如果是数据库的溢出不是应该在存数据的时候会有这个问题吗。 而不是在显示数据的时候。如果是Javasript的溢出那么返回的结果是无穷大才对。而且uuid字段在数据库存储的类型是bigint(21) bigint的取值范围在-2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 

 

解决的方法很简单就是在取数据的时候把int 强转成string 就可以解决了。但是总得知道下原因哇 不然怎么装逼!!!

 

一、安全整数

php中的字符串到浏览器中会解析成Javascript的字符串,PHP中的整型在浏览器中会解析成Javascript的数字类型。这就涉及到了Javascript中的安全整数问题。

安全整数的概念是关于JavaScript中如何表示数学整数

在范围-2^53(-9007199254740992)到2^53(9007199254740992)之间JavaScript的整数是安全的

(1)有数学整数以及它们在JavaScript表示之间的一对一的映射。

(2)超出此范围,JavaScript整数是不安全的:两个或多个数学整数表示为同一JavaScript整数。

eg:

在浏览器中从2^53开始,JavaScript只能表示第二个数学整数

原因在于

在JavaScript中的数字表示为

                                  尾数×2 ^指数

尾数和指数提供53位整数,但是,可以使用较高的指数表示较高的整数。例如,指数增加1(乘以2)的整数的53位范围变为54位范围。但是,如上所述,现在只能表示第二个整数。而且

在浏览器中从2^54

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值