Estoy ejecutando el siguiente código en un script PHP:
$obj = new \stdClass(); $obj->lat = 0.000011399388312455; echo json_encode($obj) . "\n";La salida del script es
{"lat":1.1399388312454999446e-5}Como puede ver, el número se representa en notación exponencial. ¿Hay alguna forma de representar ese número en particular en notación extendida, en el objeto serializado JSON?
La salida deseada es
{"lat":0.000011399388312455}La versión de PHP es 5.6.30.
PD: este objeto serializado en JSON se enviará a un servicio web externo que no acepta números en forma exponencial. Además, debe ser un número y no una cadena ( {"lat":"0.000011399388312455"} no funcionará).
El número no debe redondearse (es una coordenada geográfica).
Aquí hay otras preguntas similares, pero lamentablemente no se ajustan a mi caso.
php: número de punto flotante mostrado en forma exponencial
Elimina la "E" en un formato de número para números muy pequeños
Gracias de antemano.
Se implementa en PHP 7.1 https://wiki.php.net/rfc/precise_float_value Como solución alternativa, use otros serializadores JSON que no json_encode predeterminados.
La notación E es una forma válida de representación flotante. En php >7.1 con precisión establecida en -1, los resultados de su código se verían así: {"lat":1.1399388312455e-5} que es absolutamente lo mismo que 0.000011399388312455 porque tiene 4 ceros a la izquierda.
Si aún desea tener ceros a la izquierda en json, iría hacia las cadenas. Están perfectamente bien para representaciones de coordenadas.