これはもっと注意が必要なので、問題ではありません。json_encode()
PHP7.1.1を使用するアプリケーションを更新しましたが、フロートが17桁に拡張されることがあるという問題が発生していました。ドキュメントによると、PHP 7.1.xは、serialize_precision
double値をエンコードするときに精度の代わりに使用し始めました。私はこれが例の値を引き起こしたと推測しています
472.185
になる
472.18500000000006
その値が通過した後json_encode()
。発見してから、PHP 7.0.16に戻り、json_encode()
。の問題は発生しなくなりました。また、PHP 7.0.16に戻す前に、PHP7.1.2に更新しようとしました。
この質問の背後にある理由は、PHP-浮動小数点精度に由来しますが、これのすべての理由は、の精度からserialize_precisionの使用法への変更によるものjson_encode()
です。
誰かがこの問題の解決策を知っているなら、私は推論/修正について聞いて喜んでいます。
多次元配列からの抜粋(前):
[staticYaxisInfo] => Array
(
[17] => stdClass Object
(
[variable_id] => 17
[static] => 1
[min] => 0
[max] => 472.185
[locked_static] => 1
)
)
そして通過した後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);
おそらく以前のようにシリアル化するでしょうが、フロートの特定の精度に本当に依存している場合は、何か間違ったことをしています。