在 PHP7.1、7.2beta 中,使用 json_encode()
函式處理 float/double
型數值時會出現溢位。
對此,我參考網上的方法寫了一個 package
,歡迎使用 ^_^ 。
感謝 @ElfSundae 解答,這個問題確實是由於 php.ini
中 serialize_precision
項中配置不當引起的,是我理解錯了。
PHP 官方 WIKI 在此:https://wiki.php.net/rfc/precise_float_val...
示例
>>> $a = 0.1 + 0.7
=> 0.8
>>> printf('%.20f', $a)
=> 0.79999999999999993339
>>> json_encode($a)
=> "0.7999999999999999"
>>> \YaJson::encode($a)
=> "0.8"
用法
-
修復精度並進行
json_encode
:$data = [ 'a' => 0.1 + 0.7, 'b' => ['string1', 'string2'], ]; \YaJson::encode($data);
-
只獲取修復後的資料,不進行
json_encode
:$data = [ 'a' => 0.1 + 0.7, 'b' => ['string1', 'string2'], ]; \YaJson::prepare($data);
安裝
-
安裝包檔案
composer require "seekerliu/laravel-another-json:dev-master"
配置
Laravel 5.5
Laravel 5.5
安裝新包後會預設執行@php artisan package:discover
命令,所以可以不進行下面的操作。
-
註冊
ServiceProvider
及Facade
:php artisan package:discover
-
如需修改預設迴圈深度、精度位數,則建立配置檔案:
php artisan vendor:publish
Laravel 5.4 及以下
-
註冊
ServiceProvider
及Facade
:'providers' => [ //... Seekerliu\YaJson\ServiceProvider::class, ], 'aliases' => [ //... 'YaJson' => Seekerliu\YaJson\Facade::class, ],
-
如需修改預設迴圈深度、精度位數,則建立配置檔案:
php artisan vendor:publish --provider="Seekerliu\YaJson\ServiceProvider"
Github: https://github.com/seekerliu/laravel-anoth...
感謝博主提供的思路: http://www.itread01.com/articles/148977474...
本作品採用《CC 協議》,轉載必須註明作者和本文連結
原創。 所有 Laravel 文章均已收錄至 Github laravel-tips 專案。