環境: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 協議》,轉載必須註明作者和本文連結