PHP似乎有a bug處理json_encode中的十進制精度的方式。如何json_encode在PHP 7.1.1中浮點值?
這很容易通過編碼一個簡單的浮動看到的只是:
echo json_encode(["testVal" => 0.830]);
// Prints out:
{"testVal":0.82999999999999996003197111349436454474925994873046875}
我沒有太大的服務器管理的,所以除了去到php.ini並改變serialize_precision
爲-1,是有在我的代碼中可以做的任何事情來防止這種情況發生,當我無法確定它是否在該設置已更改的環境中運行時?
編輯: 我敢肯定,一些意見將希望鏈接到爲什麼浮點不精確存在的一般討論。我知道。我的問題是關於在PHP中處理它的最佳實踐,以及是否有防禦性代碼的方法。當然,有比將花車作爲字符串發送更好的方法。
會發生這種情況在7.0呢? –
正如您關於錯誤報告的討論清楚地表明的那樣,這不是一個錯誤,而是一個故意的特徵。如果您的服務器配置爲高精度地序列化浮點數,那麼'json_encode'現在就會尊重這一點。 – IMSoP
如果你將該值寫入字符串?那麼你有你想要的確切數字。 – Stony