修復 PHP7.一、7.2beta 中 JSON_encode () 處理 float/double 型數值時溢出的問題

在 PHP7.一、7.2beta 中,使用 json_encode() 函數處理 float/double 型數值時會出現溢出。
網上通常認爲是因爲 php.iniserialize_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"

用法

  1. 修復精度並進行 json_encodehtml

    $data = [
        'a' => 0.1 + 0.7,
        'b' => ['string1', 'string2'],
    ];
    
     \YaJson::encode($data);
  2. 只獲取修復後的數據,不進行 json_encodelaravel

    $data = [
        'a' => 0.1 + 0.7,
        'b' => ['string1', 'string2'],
    ];
    
     \YaJson::prepare($data);

安裝

  1. 安裝包文件git

    composer require "seekerliu/laravel-another-json:dev-master"

配置

Laravel 5.5

Laravel 5.5 安裝新包後會默認執行 @php artisan package:discover 命令,因此能夠不進行下面的操做。github

  1. 註冊 ServiceProviderFacade:shell

    php artisan package:discover
  2. 如需修改默認循環深度、精度位數,則建立配置文件:json

    php artisan vendor:publish

Laravel 5.4 及如下

  1. 註冊 ServiceProviderFacade:composer

    'providers' => [
        //...
        
        Seekerliu\YaJson\ServiceProvider::class,
    ],
    
    'aliases' => [
        //...
        
        'YaJson' => Seekerliu\YaJson\Facade::class,
    ],
  1. 如需修改默認循環深度、精度位數,則建立配置文件:ide

    php artisan vendor:publish --provider="Seekerliu\YaJson\ServiceProvider"

    Github: https://github.com/seekerliu/laravel-another-json函數

感謝博主提供的思路: http://www.itread01.com/articles/1489774743.html

相關文章
相關標籤/搜索