Đây không phải là một câu hỏi vì nó là một nhận thức rõ hơn. Tôi đã cập nhật một ứng dụng sử dụng json_encode()
thành PHP7.1.1 và tôi đã nhìn thấy một vấn đề với phao được thay đổi để đôi khi kéo dài 17 chữ số. Theo tài liệu, PHP 7.1.x bắt đầu 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ị ví dụ vềPHP7.1 json_encode() Float Issue
472,185
để trở thành
472,18500000000006
sau khi giá trị đó đã trải qua json_encode()
. Kể từ khi khám phá của tôi, tôi đã hoàn nguyên về PHP 7.0.16 và tôi không còn gặp vấn đề với 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, lý do cuối cùng là vì sự thay đổi từ độ chính xác sang sử dụng serialize_precision trong json_encode()
.
Nếu có 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/khắc phục.
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 đ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ó lẽ sẽ làm cho nó tuần tự hóa như nó đã từng sử dụng, tuy nhiên nếu bạn thực sự dựa vào độ chính xác cụ thể trên phao bạn đang làm gì đó sai. – apokryfos
Giá trị mặc định là 17, nhưng tôi đã đổi thành -1 để có "thuật toán nâng cao". Không có con xúc xắc. – Gwi7d31
* "Nếu có ai biết giải pháp cho vấn đề này" * - có vấn đề gì? Tôi không thể thấy bất kỳ vấn đề nào ở đây. Nếu bạn giải mã JSON bằng cách sử dụng PHP, bạn lấy lại giá trị bạn đã mã hóa. Và nếu bạn giải mã nó bằng một ngôn ngữ khác, có lẽ bạn sẽ nhận được cùng một giá trị. Dù bằng cách nào, nếu bạn in giá trị bằng 12 chữ số, bạn sẽ nhận được giá trị ban đầu ("đúng"). Bạn có cần nhiều hơn 12 chữ số thập phân chính xác cho các phao được ứng dụng của bạn sử dụng không? – axiac