Laravel5.5 JSON 響應出現浮點小數溢位問題

vance發表於2019-07-15

環境:php7.1+laravel5.5

現象描述:在進行介面輸出,因為使用了JSON 響應

return response()->json()

出現了浮點數

10.629999999999997

的問題

1,檢視了laravel文件

json 方法會自動把 Content-Type 響應頭資訊設定為 application/json,並使用 PHP 函式 json_encode 將給定的陣列轉換為 JSON:

return response()->json([
    'name' => 'Abigail',
    'state' => 'CA'
]);

表示透過json_encode將陣列轉為json,所以問題出現在json_encode上面

2,經過網上查詢得知
該現象只出現在PHP 7.1+版本上
PHP RFC:更精確的浮點值處理

網上說可以透過調整 php.ini 中 serialize_precision (序列化精度) 的大小來解決這個問題。

預設值 serialize_precision = -1

; When floats & doubles are serialized store serialize_precision significant
; digits after the floating point. The default value ensures that when floats
; are decoded with unserialize, the data will remain the same.
; The value is also used for json_encode when encoding double values.
; If -1 is used, then dtoa mode 0 is used which automatically select the best
; precision.
serialize_precision = 17

按照說明,將這個值改為 小於 17 的數字就解決了這個問題,最後一直往小調,我14的時候就沒有問題了

這裡參照了

本作品採用《CC 協議》,轉載必須註明作者和本文連結
vance

相關文章