Esta não é uma pergunta, pois é mais uma questão de estar ciente. Atualizei um aplicativo que usa json_encode()
para PHP7.1.1 e estava vendo um problema com flutuações sendo alteradas para, às vezes, estender para 17 dígitos. De acordo com a documentação, o PHP 7.1.x passou a usar ao serialize_precision
invés da precisão ao codificar valores duplos. Estou supondo que isso causou um valor de exemplo de
472,185
tornar-se
472.18500000000006
depois que esse valor passou json_encode()
. Desde minha descoberta, voltei para o PHP 7.0.16 e não tenho mais problemas com o json_encode()
. Também tentei atualizar para o PHP 7.1.2 antes de voltar para o PHP 7.0.16.
O raciocínio por trás desta questão deriva de PHP - Floating Number Precision , no entanto, a razão final para isso é por causa da mudança do uso de precisão para serialize_precision em json_encode()
.
Se alguém souber de uma solução para este problema, ficaria mais do que feliz em ouvir o raciocínio / correção.
Trecho da matriz multidimensional (antes):
[staticYaxisInfo] => Array
(
[17] => stdClass Object
(
[variable_id] => 17
[static] => 1
[min] => 0
[max] => 472.185
[locked_static] => 1
)
)
e depois de passar 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);
provavelmente faria com que fosse serializado como costumava fazer, no entanto, se você realmente confia em uma precisão específica em seus flutuadores, está fazendo algo errado.