2011-04-04 33 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