Предупреждение: массовая ошибка в json_encode () - PullRequest
5 голосов
/ 04 апреля 2011
<?php  
$int = 1968401665333658496;  
echo json_encode( array("$int",$int) );  
?>  

Получено в браузере: [ "1968401665333658496" , 1968401665333658600 ]

Это округляет мое целое число?

Кстати: PHP_INT_MAX = 9223372036854775807 ~ PHP Version 5.3.2-1ubuntu4.7
Никаких проблем с этими огромными числами нигде (PHP, MySQL или Javascript)
- до тех пор, пока json_encode() не облажается (молча, между прочим)

Ответы [ 3 ]

4 голосов
/ 04 апреля 2011

Это не просто проблема JSON. Если вы поставите

alert(1968401665333658496);

в консоли Firebug вы получаете 1968401665333658600

Возможно, вы достигли максимального значения JS.

Здесь обсуждается это: Какое наибольшее целочисленное значение в JavaScript может быть достигнуто числом без потери точности?

2 голосов
/ 04 апреля 2011

Javascript не имеет понятия целых чисел, согласно стандарту все числа являются двойными IEEE, что означает, что они имеют 52 бита мантиссы. это приводит к практическому максимальному «целочисленному» значению 2^53 до потери точности.

Я не уверен, что у вас не было проблем с такими большими числами только в JS - если вы этого не сделали, ваша реализация JS не соответствует стандартам.

1 голос
/ 04 апреля 2011

Укажите ваше целочисленное значение и обработайте преобразование на клиенте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...