Đây không phải là một câu hỏi vì nó cần được chú ý nhiều hơn. Tôi đã cập nhật một ứng dụng sử dụng json_encode()
lên PHP7.1.1 và tôi đã gặp sự cố khi số float được thay đổi để đôi khi mở rộng ra 17 chữ số. Theo tài liệu, PHP 7.1.x bắt đầu được sử dụng serialize_precision
thay vì độ chính xác khi mã hóa các giá trị kép. Tôi đoán điều này gây ra một giá trị mẫu là
472.185
để trở thành
472.18500000000006
sau khi giá trị đó đi qua json_encode()
. Kể từ khi phát hiện ra, tôi đã hoàn nguyên trở lại PHP 7.0.16 và tôi không còn gặp vấn đề gì json_encode()
nữa. Tôi cũng đã cố gắng cập nhật lên PHP 7.1.2 trước khi hoàn nguyên về PHP 7.0.16.
Lý do đằng sau câu hỏi này xuất phát từ PHP - Floating Number Precision , tuy nhiên, cuối cùng tất cả lý do cho điều này là do sự thay đổi từ cách sử dụng precision sang serialize_pre precision trong json_encode()
.
Nếu ai đó biết giải pháp cho vấn đề này, tôi rất sẵn lòng lắng nghe lý do / sửa chữa.
Trích từ mảng đa chiều (trước):
[staticYaxisInfo] => Array
(
[17] => stdClass Object
(
[variable_id] => 17
[static] => 1
[min] => 0
[max] => 472.185
[locked_static] => 1
)
)
và sau khi trải qua 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);
có thể sẽ làm cho nó tuần tự hóa như trước đây, tuy nhiên nếu bạn thực sự dựa vào độ chính xác cụ thể trên phao của mình thì bạn đang làm sai.