Ini bukan pertanyaan karena lebih merupakan kewaspadaan. Saya memperbarui aplikasi yang menggunakan json_encode()
PHP7.1.1 dan saya melihat masalah dengan float yang diubah terkadang melebihi 17 digit. Menurut dokumentasi, PHP 7.1.x mulai digunakan serialize_precision
sebagai pengganti presisi saat mengenkode nilai ganda. Saya menduga ini menyebabkan nilai contoh
472.185
untuk menjadi
472.18500000000006
setelah nilai itu masuk json_encode()
. Sejak penemuan saya, saya telah kembali ke PHP 7.0.16 dan saya tidak lagi memiliki masalah dengan json_encode()
. Saya juga mencoba memperbarui ke PHP 7.1.2 sebelum kembali ke PHP 7.0.16.
Alasan di balik pertanyaan ini memang berasal dari PHP - Floating Number Precision , namun pada akhirnya semua alasan untuk ini adalah karena perubahan dari penggunaan presisi ke serialize_precision di json_encode()
.
Jika ada yang tahu solusi untuk masalah ini, saya akan dengan senang hati mendengarkan alasan / perbaikannya.
Kutipan dari array multidimensi (sebelum):
[staticYaxisInfo] => Array
(
[17] => stdClass Object
(
[variable_id] => 17
[static] => 1
[min] => 0
[max] => 472.185
[locked_static] => 1
)
)
dan setelah melalui 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);
mungkin akan membuatnya berseri seperti dulu, namun jika Anda benar-benar mengandalkan presisi tertentu pada float Anda, Anda melakukan sesuatu yang salah.