2011-04-04 51 views
5
<?php 
$int = 1968401665333658496; 
echo json_encode(array("$int",$int)); 
?> 

收到浏览器:[ "1968401665333658496" , 1968401665333658600 ]警告:json_encode大规模误差()

据 “四舍五入” 我的整数?

BTW:PHP_INT_MAX = 9223372036854775807 ~ PHP Version 5.3.2-1ubuntu4.7
与这些巨大的整数没有问题的任何地方(PHP,MySQL或JavaScript)的
- 直到json_encode()螺丝它(顺便说一句默默..)

回答

2

JavaScript有没有整型的概念,按照标准的所有数字IEEE双打,这意味着它们具有尾数的52位。这会导致实际的最大“整数”值2^53在任何精度损失之前。

我不知道你是如何没有JS中单独存在的这个大数字的问题 - 如果你没有你的JS实现不符合标准。

+0

哇,这是令人清醒的。与JS工作过,不知道这样的基本事实。仍然2^53 = 9007199254740992,仍然留下了我的(8种类型)独特密钥方案的大量蠕动空间:)谢谢! – T4NK3R 2011-04-04 17:28:00

1

引用您的整数值,处理转换在客户端。

+0

这根本无济于事 - 这个数字大于符合标准的JS实现可以处理的精度。 – tobyodavies 2011-04-04 17:05:56

+0

是的,我知道这一点。 – 2011-04-04 17:12:54

+0

如果你知道它不会有什么区别,你为什么建议呢? – tobyodavies 2011-04-05 03:12:56