高清国产美女一级毛片_91短视频版在线观看www免费_久久久久久久综合_国产精品爱久久久久久久电影

福州網(wǎng)站建設(shè)>網(wǎng)站新聞>php技術(shù)

踩坑之json_encode精度丟失問題

發(fā)布日期:2022-01-12瀏覽次數(shù):1237 來源:福州網(wǎng)站建設(shè)

1.前言
最近在工作中,后臺出現(xiàn)了這樣的錯誤,傳遞的手續(xù)費是29塊錢,但是傳遞到了第三方接口就報錯了,查看日志顯示該手續(xù)費變成了28.999999999999996,日志如下:






明明是29怎么就變了?通過斷點檢測,原來是json_encode()轉(zhuǎn)換的問題


2.案例演示
$param={


‘a(chǎn)mount’=>5000,


‘fee’=>29


}


var_dump(json_encode($param));//{"amount":5000,"fee":28.999999999999999999996}
3.解決方法
3.1方法1:強(qiáng)行轉(zhuǎn)換成字符串保證精度
$request['param']['feeAmount']=(string)$request['param']['feeAmount'];


注意:使用這種方法千萬要注意,對接接口是否有變量類型要求


3.2方法2:格式化數(shù)字number_format函數(shù)
number_format(number,decimals,decimalpoint,separator)


參數(shù):


number參數(shù)是要格式化的數(shù)據(jù)
decimals參數(shù)是保留的小數(shù)
decimalpoint參數(shù)是規(guī)定用作小數(shù)點的字符串
separator參數(shù)是規(guī)定用作千位分隔符的字符串
案例:
$request['param']['feeAmount']=(int)number_format($request['param']['feeAmount'],0);


注意:number_format返回的是字符串string,要注意接口是否有規(guī)范要求,如果有,則須強(qiáng)行轉(zhuǎn)換為int或接口規(guī)范的類型


疑問1:這時候應(yīng)該有人在想能不能直接強(qiáng)制轉(zhuǎn)換為int呢?注意,float強(qiáng)制轉(zhuǎn)換成int有坑!


答:int類型是向下取整的,比如:12910.9 會被轉(zhuǎn)換為 12910


疑問2:這時就會有人問我,浮點數(shù)顯示的是8,為什么轉(zhuǎn)換成整數(shù)會變成7?


答:floor((0.1+0.7)*10),其結(jié)果是7而不是8,是因為該結(jié)果內(nèi)部表示的是7.9999.....所以不要相信浮點數(shù)結(jié)果精確,也不要比較兩個浮點數(shù)是否相等
3.3方法3:修改配置項serialize_precision
json_encode() 轉(zhuǎn)換浮點小數(shù)溢出現(xiàn)象只出現(xiàn)在PHP 7.1+版本,是因為php源碼對于json_encode()轉(zhuǎn)換使用到了serialize_precision配置項,如下圖


static inline void php_json_encode_double(smart_str *buf, double d, int options) /* {{{ */
{
    size_t len;
    char num[PHP_DOUBLE_MAX_LENGTH];
    php_gcvt(d, (int)PG(serialize_precision), '.', 'e', num);
    len = strlen(num);
    if (options & PHP_JSON_PRESERVE_ZERO_FRACTION && strchr(num, '.') == NULL && len < PHP_DOUBLE_MAX_LENGTH - 2) {
        num[len++] = '.';
        num[len++] = '0';
        num[len] = '\0';
    }
    smart_str_appendl(buf, num, len);
}
關(guān)于PHP函數(shù)serialize_precision (integer)的一些概念了解:


適用范圍:PHP_INI_ALL;


默認(rèn)值:100


serialize_precision指令的數(shù)量決定了雙打和彩車被序列化后的浮點數(shù)字存儲。設(shè)置到一個合適的值,確保精度的數(shù)字時,可能丟失以后反序列化。所以我們要使得json_encode()轉(zhuǎn)換浮點數(shù)沒有小數(shù)溢出,建議使用默認(rèn)值 serialize_precision = -1 即可 。


3.4知識點補充
json_encode有個選項JSON_PRESERVE_ZERO_FRACTION,表示如果是個整數(shù), 是否保留小數(shù)點和尾數(shù)0,舉例如下:


<?php
echo json_encode(223.0);// 223
echo json_encode(223.0, JSON_PRESERVE_ZERO_FRACTION);// 223.0
3.5其他取整函數(shù)
四舍五入取整 round(param)
向上取整 ceil(param)
向下取整 floor(param)


4.bcsub()函數(shù)精度相減
格式:


string bcsub ( string $left_operand , string $right_operand [, int $scale = int ] )


說明:


2個任意精度數(shù)字的減法


參數(shù):


left_operand:字符串類型的左操作數(shù).


right_operand:字符串類型的右操作數(shù).


scale:此可選參數(shù)用于設(shè)置結(jié)果中小數(shù)點后的小數(shù)位數(shù)。也可通過使用 bcscale() 來設(shè)置全局默認(rèn)的小數(shù)位數(shù),用于所有函數(shù)。


返回值:


返回減法之后結(jié)果為字符串類型.


代碼案例:


<?php
$a  =  '1.234' ;
$b  =  '5' ;
echo  bcsub ( $a ,  $b );      // -3
echo  bcsub ( $a ,  $b ,  4 );   // -3.7660
————————————————
版權(quán)聲明:本文為CSDN博主「拯救世界的派大星」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/m0_46266407/article/details/105556444

以上是由福州網(wǎng)站建設(shè)的小編為你分享了"踩坑之json_encode精度丟失問題"文章,如果你在這方面有什么問題,隨時聯(lián)系我們

php技術(shù)有關(guān)的文章
如果您有什么問題,歡迎咨詢我們客服! 點擊QQ咨詢
高清国产美女一级毛片_91短视频版在线观看www免费_久久久久久久综合_国产精品爱久久久久久久电影

        国产精品久久| 日韩亚洲在线| 丁香婷婷久久| 丝袜美腿成人在线| 蜜桃av.网站在线观看| 伊人久久大香伊蕉在人线观看热v| 久久久国产精品入口麻豆| 婷婷亚洲综合| 精品久久美女| 国产精品探花在线观看| 久久亚洲电影| 蜜桃久久av一区| 午夜久久久久| 国产福利91精品一区二区| 蜜桃国内精品久久久久软件9| 精品国产鲁一鲁****| 91精品日本| 综合激情网...| 午夜在线精品| 香蕉精品久久| 久久久精品午夜少妇| 麻豆mv在线观看| 免费在线亚洲| 日韩精品一级| 一区二区三区午夜视频| 欧美精品自拍| 免费美女久久99| 99亚洲精品| 欧美+日本+国产+在线a∨观看| 国产va免费精品观看精品视频| 免费一级欧美片在线观看网站| 日韩欧美中文字幕电影| 蜜桃视频一区二区| 欧美在线资源| 美美哒免费高清在线观看视频一区二区| 国产一区日韩一区| 国产一区视频在线观看免费| 欧美成人基地 | 亚洲理论在线| 石原莉奈在线亚洲三区| 尤物tv在线精品| 99pao成人国产永久免费视频| 男女男精品视频网| 蜜桃视频在线观看一区二区| 伊人www22综合色| 日韩国产欧美在线视频| 日本aⅴ免费视频一区二区三区| 日韩三级精品| 精品72久久久久中文字幕| 热三久草你在线| 在线一区欧美| 免费精品一区| 亚洲一区二区三区免费在线观看| 亚洲我射av| 国产毛片精品久久| 超碰超碰人人人人精品| 美女黄网久久| 精品国产乱码| 石原莉奈在线亚洲二区| 欧美日韩精品一区二区三区在线观看| 久久男人av| 免费不卡在线观看| 四虎精品永久免费| 国产aⅴ精品一区二区三区久久| 欧美日韩国产在线观看网站| 91在线成人| 三级小说欧洲区亚洲区| 免费精品视频最新在线| 国产一区二区精品久| 免费在线欧美视频| **爰片久久毛片| 国产精品日本欧美一区二区三区| 精品视频在线你懂得| 免费国产亚洲视频| 美女毛片一区二区三区四区 | 亚洲午夜免费| 999国产精品| 精品精品99| 国产情侣一区| 亚洲免费影视| 久久精品高清| 岛国精品一区| 免费日韩一区二区三区| 午夜视频一区二区在线观看| 99pao成人国产永久免费视频 | 精品99久久| 国产黄色一区| 国产剧情一区二区在线观看| 亚洲在线电影| 在线一区视频| 国产精品毛片一区二区三区| 久久人人99| 成人久久一区| 香蕉成人av| 亚洲国内欧美| 久久91导航| 久久国产亚洲| 偷拍欧美精品| 国产精品毛片| 婷婷亚洲成人| 国产探花在线精品一区二区| 欧美日韩一视频区二区| 日韩高清中文字幕一区| 四虎精品一区二区免费| 日本色综合中文字幕| 日韩精品欧美大片| 日韩国产欧美一区二区三区| 日韩精品一级| 国产极品久久久久久久久波多结野 | av免费不卡国产观看| 久久久久亚洲精品中文字幕| 免费一区二区三区在线视频| 欧美国产极品| 日韩黄色大片| 好吊一区二区三区| 丝袜美腿亚洲一区二区图片| 人人爱人人干婷婷丁香亚洲| 国产精品亚洲成在人线| 国产一区二区三区91| 亚洲欧洲美洲av| 伊人久久大香线蕉av超碰演员| 视频一区欧美精品| 国产乱人伦精品一区| 国产一区二区久久久久| 国产99精品| 亚洲乱码视频| 91视频一区| 尹人成人综合网| 国产日韩免费| 欧美1级日本1级| 国产亚洲精品精品国产亚洲综合| 国产日韩电影| 西西人体一区二区| 精品国产一区二| 亚洲欧美日韩国产一区二区| 日韩在线电影| 免费一二一二在线视频| 亚洲综合色婷婷在线观看| 成人国产精品久久| 麻豆亚洲精品| 日韩三区在线| 久久精品xxxxx| 黄色欧美日韩| 国产一区二区久久久久| 免费在线观看日韩欧美| 黄色网一区二区| 奶水喷射视频一区| 久久精品伊人| 免费精品视频最新在线| 伊人久久在线| 国产精品99久久免费观看| 免费欧美日韩| 久久久久久黄| 狂野欧美性猛交xxxx| 日韩精品一区二区三区中文在线| 四虎884aa成人精品最新| 国产欧美在线观看免费| 久久aⅴ国产紧身牛仔裤| 欧美激情视频一区二区三区在线播放| 99在线观看免费视频精品观看| 精品资源在线| 日韩av中文字幕一区| 精品91久久久久| 色偷偷偷在线视频播放| 国产精品hd| 日韩高清一区在线| 在线国产一区二区| 欧美aa在线观看| 日韩成人a**站| 麻豆精品在线观看| 国产精品乱战久久久| 免费在线观看精品| 日韩视频一区| 国产中文一区| 国产伊人精品| 一区免费在线| 国产精品免费看| 亚洲深夜福利在线观看| 欧美日韩免费观看一区=区三区| 国产亚洲一区二区手机在线观看| 国产96在线亚洲| 天堂av在线| 久久精品一区二区不卡| 午夜精品成人av| 99久久视频| 国产视频亚洲| 在线精品国产亚洲| 亚洲乱码视频| 日韩精品高清不卡| 国产精品白浆| 国产精品福利在线观看播放| av资源中文在线| 久久免费国产| 久久高清免费| 日韩精品五月天| 麻豆久久久久久久| 欧美午夜精品一区二区三区电影| 欧美 日韩 国产一区二区在线视频| 婷婷色综合网| 日韩av网站在线免费观看|