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

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

踩坑之json_encode精度丟失問題

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

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






明明是29怎么就變了?通過斷點(diǎn)檢測(cè),原來是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'];


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


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ù)點(diǎn)的字符串
separator參數(shù)是規(guī)定用作千位分隔符的字符串
案例:
$request['param']['feeAmount']=(int)number_format($request['param']['feeAmount'],0);


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


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


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


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


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


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


3.4知識(shí)點(diǎn)補(bǔ)充
json_encode有個(gè)選項(xiàng)JSON_PRESERVE_ZERO_FRACTION,表示如果是個(gè)整數(shù), 是否保留小數(shù)點(diǎn)和尾數(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個(gè)任意精度數(shù)字的減法


參數(shù):


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


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


scale:此可選參數(shù)用于設(shè)置結(jié)果中小數(shù)點(diǎn)后的小數(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)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/m0_46266407/article/details/105556444

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

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

        97人人模人人爽人人澡| 四虎免费在线观看视频| a在线观看免费视频| 国产资源在线免费观看| 99精品视频网站| 天天干在线影院| 欧洲熟妇精品视频| 国产a视频免费观看| 欧美综合在线播放| 国产免费一区二区视频| 国内自拍中文字幕| 久久观看最新视频| 国风产精品一区二区| 黄色影视在线观看| 欧美性猛交内射兽交老熟妇| 国产成人三级视频| 日韩欧美视频免费在线观看| 妞干网在线播放| 蜜臀av色欲a片无码精品一区| 999一区二区三区| 日韩在线观看a| 久久综合久久网| 91丨porny丨探花| 女性女同性aⅴ免费观女性恋| 国产精品沙发午睡系列| aa免费在线观看| 手机看片福利日韩| 日韩高清第一页| 亚洲视频在线不卡| 九九久久九九久久| 国产精品久久..4399| 无码人妻h动漫| 欧美伦理片在线观看| 一级淫片在线观看| 男人草女人视频| 欧美网站免费观看| 北条麻妃视频在线| www.国产福利| 17c丨国产丨精品视频| 伊人成色综合网| 欧美 亚洲 视频| av免费观看国产| 中文字幕无码不卡免费视频| 免费看涩涩视频| 欧美日韩中文在线视频| 亚洲无吗一区二区三区| caoporm在线视频| 日韩成人三级视频| 丝袜老师办公室里做好紧好爽| 少妇性l交大片| 亚洲自拍第三页| 国产xxxx振车| 欧美三级理论片| 免费cad大片在线观看| 黄色片一级视频| 色噜噜狠狠一区二区| 欧美精品久久96人妻无码| 青青草精品视频在线| 成人性视频欧美一区二区三区| 黑森林福利视频导航| 中文字幕国产免费| 国产精品12p| 日日摸日日碰夜夜爽无码| 欧美精品aaaa| 白白操在线视频| 欧美三级午夜理伦三级| www.久久久久久久久久久| 真实国产乱子伦对白视频| 黄色成人免费看| 国产 欧美 日韩 一区| 日韩一级免费在线观看| 久久免费视频2| 日av中文字幕| 欧美一区二区三区综合| 免费看污黄网站| 东北少妇不带套对白| 高清一区在线观看| 全黄性性激高免费视频| 成人不卡免费视频| 日韩欧美国产免费| 黄色小视频大全| 亚洲黄色av网址| 国产黄视频在线| eeuss中文| www.在线观看av| 天堂а√在线中文在线| 日本福利视频一区| 天堂在线一区二区三区| 亚洲熟妇无码另类久久久| 中文字幕成人免费视频| 免费看国产一级片| 国产成人精品免费看在线播放| 日韩精品视频久久| 波多野结衣与黑人| 黄色小视频免费网站| 99爱视频在线| 亚洲色图都市激情| 亚洲综合婷婷久久| 国产精品免费成人| 妞干网在线视频观看| 91视频成人免费| 精品综合久久久久| 成年人小视频网站| 国产免费黄视频| 日韩精品在线视频免费观看| 亚洲av毛片在线观看| 天天视频天天爽| 日本免费一级视频| 毛片在线视频播放| 久久这里只有精品18| 法国空姐在线观看免费| theporn国产精品| 一级网站在线观看| 精品一区二区三区无码视频| 国产5g成人5g天天爽| 免费涩涩18网站入口| 国产女女做受ⅹxx高潮| 欧美人成在线观看| 国产肉体ⅹxxx137大胆| 欧美一级特黄aaaaaa在线看片| 91视频这里只有精品| 日本888xxxx| 50路60路老熟妇啪啪| 日韩av黄色网址| 一区二区三区网址| 日本www.色| 福利在线一区二区三区| 热久久精品国产| av视屏在线播放| 天堂av在线网站| 9久久婷婷国产综合精品性色| 九九视频精品在线观看| 国产又大又黄又粗的视频| 天天碰免费视频 | 日韩精品一区二区三区不卡| 日韩av一二三四区| 欧美三级午夜理伦三级| 妺妺窝人体色www在线观看| 人妻无码一区二区三区四区| 国产日韩欧美大片| 超碰97在线看| 日韩极品视频在线观看| 毛片在线视频播放| 北条麻妃在线一区| 性猛交ⅹ×××乱大交| 天天看片天天操| 一级黄色录像免费看| 国产 国语对白 露脸 | 欧美成人高潮一二区在线看| 欧美黑人经典片免费观看| 男人揉女人奶房视频60分| 国产激情在线观看视频| 亚洲一区二区福利视频| 2022中文字幕| 久久久久久久久久久福利| 天堂中文视频在线| 三级黄色片免费观看| 国产精品视频黄色| 免费观看精品视频| 激情婷婷综合网| 国产精品嫩草影院8vv8| 日日噜噜噜夜夜爽爽| 日本一道在线观看| 国产精品国产亚洲精品看不卡| 国产主播在线看| www.涩涩涩| 成人免费aaa| 午夜免费精品视频| 永久av免费在线观看| 日韩极品视频在线观看| 北条麻妃在线一区| 久久艹这里只有精品| 黄色一级视频在线播放| 在线观看亚洲色图| 国产精品三级一区二区| av无码精品一区二区三区| 日韩av影视大全| 国产视频九色蝌蚪| 国产在线播放观看| 日韩一区二区三区不卡视频| 青青在线视频免费观看| 天天干在线影院| 污污污污污污www网站免费| 青青在线免费观看视频| 国产一级片91| 色悠悠久久综合网| 免费视频爱爱太爽了| 国产精品v日韩精品v在线观看| 精品人妻大屁股白浆无码| 岛国大片在线播放| 久久久精品麻豆| 奇米777四色影视在线看| www.激情小说.com| 青青草精品视频在线| 99精品视频国产| 虎白女粉嫩尤物福利视频| 韩国黄色一级大片| 亚洲第一狼人区| 两根大肉大捧一进一出好爽视频| 一区二区三区四区久久|