Esta no es una pregunta, ya que es más un aviso. json_encode()
Actualicé una aplicación que usa PHP7.1.1 y estaba viendo un problema con los flotadores que se cambiaban para extenderse a veces hasta 17 dígitos. Según la documentación, PHP 7.1.x comenzó a usarse en serialize_precision
lugar de precisión al codificar valores dobles. Supongo que esto provocó un valor de ejemplo de
472.185
convertirse
472.18500000000006
después de que ese valor pasó json_encode()
. Desde mi descubrimiento, he vuelto a PHP 7.0.16 y ya no tengo el problema con json_encode()
. También intenté actualizar a PHP 7.1.2 antes de volver a PHP 7.0.16.
El razonamiento detrás de esta pregunta proviene de PHP - Precisión de números flotantes , sin embargo, la razón final de esto se debe al cambio de precisión al uso de serialize_precision en json_encode()
.
Si alguien sabe de una solución a este problema, estaría más que feliz de escuchar el razonamiento / solución.
Extracto de una matriz multidimensional (antes):
[staticYaxisInfo] => Array
(
[17] => stdClass Object
(
[variable_id] => 17
[static] => 1
[min] => 0
[max] => 472.185
[locked_static] => 1
)
)
y después de pasar por json_encode()
...
"staticYaxisInfo":
{
"17":
{
"variable_id": "17",
"static": "1",
"min": 0,
"max": 472.18500000000006,
"locked_static": "1"
}
},
ini_set('serialize_precision', 14); ini_set('precision', 14);
probablemente haría que se serializara como solía hacerlo, sin embargo, si realmente confías en una precisión específica en tus flotadores, estás haciendo algo mal.