前几天在用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开始,JavaScript只能表示第四个数学整数
,
所以安全整数的概念就是可以明确表示单个数学整数的整数。
现在在看下我出问题的例子
23 4