在 PHP7.一、7.2beta 中,使用 json_encode() 函數處理 float/double 型數值時會出現溢出。
網上通常認爲是因爲 php.ini
中 serialize_precision
項中配置不當引發,但實際際修改此配置項並不能解決問題。
對此,我參考網上的方法寫了一個 package
,歡迎使用 ^_^ 。php
>>> $a = 0.1 + 0.7 => 0.8 >>> printf('%.20f', $a) => 0.79999999999999993339 >>> json_encode($a) => "0.7999999999999999" >>> \YaJson::encode($a) => "0.8"
修復精度並進行 json_encode
:html
$data = [ 'a' => 0.1 + 0.7, 'b' => ['string1', 'string2'], ]; \YaJson::encode($data);
只獲取修復後的數據,不進行 json_encode
:laravel
$data = [ 'a' => 0.1 + 0.7, 'b' => ['string1', 'string2'], ]; \YaJson::prepare($data);
安裝包文件git
composer require "seekerliu/laravel-another-json:dev-master"
Laravel 5.5
安裝新包後會默認執行@php artisan package:discover
命令,因此能夠不進行下面的操做。github
註冊 ServiceProvider
及 Facade
:shell
php artisan package:discover
如需修改默認循環深度、精度位數,則建立配置文件:json
php artisan vendor:publish
註冊 ServiceProvider
及 Facade
:composer
'providers' => [ //... Seekerliu\YaJson\ServiceProvider::class, ], 'aliases' => [ //... 'YaJson' => Seekerliu\YaJson\Facade::class, ],
如需修改默認循環深度、精度位數,則建立配置文件:ide
php artisan vendor:publish --provider="Seekerliu\YaJson\ServiceProvider"