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

Recibido en el navegador: [ "1968401665333658496" , 1968401665333658600 ]Advertencia: error masivo en json_encode()

Es "redondea" mi número entero?

BTW: PHP_INT_MAX = 9223372036854775807 ~ PHP Version 5.3.2-1ubuntu4.7
No hay problemas con estos enormes números enteros en cualquier lugar (PHP, MySQL o Javascript)
- hasta json_encode() tornillos hacia arriba (en silencio BTW ..)

Respuesta

2

Javascript no tiene el concepto de los números enteros, de acuerdo con el estándar de todos los números son dobles IEEE, lo que significa que tienen 52 bits de mantisa. esto lleva a un valor "entero" máximo práctico de 2^53 antes de cualquier pérdida de precisión.

No estoy seguro de cómo no tuvo problemas con números tan grandes solo en JS; si no lo hizo, su implementación de JS no cumple con los estándares.

+0

Wow, eso es aleccionador. Habiendo trabajado profesionalmente con JS, sin conocer un hecho tan básico. Todavía 2^53 = 9007199254740992, todavía me deja mucho espacio para mi (8 tipos de) esquema de clave única:) ¡GRACIAS! – T4NK3R

1

Cita su valor entero y manejar la conversión en el cliente.

+0

Esto no servirá de nada; este número es más grande que lo que una implementación JS que cumpla con los estándares puede manejar sin pérdida de precisión. – tobyodavies

+0

Sí, soy consciente de eso. –

+0

Si supiera que no haría ninguna diferencia, ¿por qué lo sugirió? – tobyodavies