Bu bir soru değil, çünkü daha çok farkında olmak. json_encode()
PHP7.1.1'i kullanan bir uygulamayı güncelledim ve kayan değerlerin bazen 17 haneyi uzatacak şekilde değiştirilmesiyle ilgili bir sorun görüyordum. Belgelere göre PHP 7.1.x, serialize_precision
çift değerleri kodlarken kesinlik yerine kullanılmaya başlandı . Bunun örnek bir değer yarattığını tahmin ediyorum
472.185
olmak
472.18500000000006
bu değer geçtikten sonra json_encode()
. Keşfimden bu yana, PHP 7.0.16'ya geri döndüm ve artık sorunum yok json_encode()
. Ayrıca PHP 7.0.16'ya geri dönmeden önce PHP 7.1.2'ye güncellemeyi denedim.
Bu sorunun arkasındaki mantık PHP - Kayan Sayı Hassasiyetinden kaynaklanmaktadır , ancak bunun son nedeni, hassasiyetten serialize_precision kullanımına geçiştir json_encode()
.
Herhangi biri bu soruna bir çözüm biliyorsa, gerekçeyi / düzeltmeyi dinlemekten çok mutlu olurum.
Çok boyutlu diziden alıntı (önce):
[staticYaxisInfo] => Array
(
[17] => stdClass Object
(
[variable_id] => 17
[static] => 1
[min] => 0
[max] => 472.185
[locked_static] => 1
)
)
ve geçtikten sonra 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);
muhtemelen eskisi gibi seri hale getirecektir, ancak gerçekten kayan noktalarda belirli bir hassasiyete güveniyorsanız, yanlış bir şeyler yapıyorsunuz demektir.