นี่ไม่ใช่คำถามเนื่องจากเป็นเรื่องที่ควรระวังมากกว่า ฉันอัปเดตแอปพลิเคชันที่ใช้json_encode()
เป็น PHP7.1.1 และพบปัญหาเกี่ยวกับการลอยตัวถูกเปลี่ยนเป็นบางครั้งขยายออกไป 17 หลัก ตามเอกสารประกอบ PHP 7.1.x เริ่มใช้serialize_precision
แทนความแม่นยำเมื่อเข้ารหัสค่าสองค่า ฉันเดาว่านี่ทำให้เกิดค่าตัวอย่างของ
472.185
ที่จะกลายเป็น
472.18500000000006
json_encode()
หลังจากค่าที่เดินผ่าน ตั้งแต่การค้นพบของฉันฉันได้เปลี่ยนกลับไปเป็น PHP 7.0.16 และฉันไม่มีปัญหากับjson_encode()
ไฟล์. ฉันยังพยายามอัปเดตเป็น PHP 7.1.2 ก่อนที่จะเปลี่ยนกลับเป็น PHP 7.0.16
เหตุผลที่อยู่เบื้องหลังคำถามนี้เกิดจากPHP - Floating Number Precisionอย่างไรก็ตามสาเหตุทั้งหมดนี้เป็นเพราะการเปลี่ยนแปลงจากความแม่นยำเป็นการใช้งาน 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);
อาจจะทำให้มันเป็นอนุกรมเหมือนที่เคยทำมา แต่ถ้าคุณอาศัยความแม่นยำเฉพาะในการลอยตัวคุณกำลังทำอะไรผิดพลาด