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

福州網站建設>網站新聞>php技術

踩坑之json_encode精度丟失問題

發布日期:2022-01-12瀏覽次數:1099 來源:福州網站建設

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






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


2.案例演示
$param={


‘amount’=>5000,


‘fee’=>29


}


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


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


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


參數:


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


注意:number_format返回的是字符串string,要注意接口是否有規范要求,如果有,則須強行轉換為int或接口規范的類型


疑問1:這時候應該有人在想能不能直接強制轉換為int呢?注意,float強制轉換成int有坑!


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


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


答:floor((0.1+0.7)*10),其結果是7而不是8,是因為該結果內部表示的是7.9999.....所以不要相信浮點數結果精確,也不要比較兩個浮點數是否相等
3.3方法3:修改配置項serialize_precision
json_encode() 轉換浮點小數溢出現象只出現在PHP 7.1+版本,是因為php源碼對于json_encode()轉換使用到了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);
}
關于PHP函數serialize_precision (integer)的一些概念了解:


適用范圍:PHP_INI_ALL;


默認值:100


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


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


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


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


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


說明:


2個任意精度數字的減法


參數:


left_operand:字符串類型的左操作數.


right_operand:字符串類型的右操作數.


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


返回值:


返回減法之后結果為字符串類型.


代碼案例:


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

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

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

        亚洲一级片免费观看| 久久久久久久久久久久久久久国产 | 99精品一区二区三区的区别| 欧美男女交配视频| 性生交免费视频| 成人中文字幕av| 国产精品50p| 国产中文字幕二区| 免费一级特黄特色毛片久久看| 欧美 日韩 国产精品| 日本天堂免费a| 国产91视频一区| 福利在线一区二区| 久久这里只有精品18| 精品国产一区二区三区无码| 国产freexxxx性播放麻豆| 日韩 欧美 视频| www.日本少妇| 欧美变态另类刺激| 精品一卡二卡三卡| 搡女人真爽免费午夜网站| www.com操| 一级黄色高清视频| 亚洲黄色网址在线观看| 精品无码av无码免费专区| 狠狠精品干练久久久无码中文字幕| 国产爆乳无码一区二区麻豆| 六月婷婷在线视频| 成人性做爰aaa片免费看不忠| 亚洲污视频在线观看| 岛国av免费在线| 男人的天堂成人| 欧美一级欧美一级| 最近免费中文字幕中文高清百度| mm131亚洲精品| a级片一区二区| 久久美女福利视频| 污污网站免费观看| 老司机午夜免费福利视频| 久色视频在线播放| 91福利国产成人精品播放| 97超碰人人看| 国产二区视频在线| 美女喷白浆视频| 蜜臀av.com| 欧美三级午夜理伦三级| 在线视频日韩欧美| 日韩伦理在线免费观看| 五月天激情视频在线观看| 国产一二三四区在线观看| 久久久一本二本三本| 亚洲国产日韩欧美在线观看| 国产情侣第一页| 特级丰满少妇一级| 久久av高潮av| 亚洲这里只有精品| www.欧美黄色| 国产三级三级三级看三级| 日韩不卡视频一区二区| 日韩精品一区二区三区不卡 | 国产日韩亚洲欧美在线| 成人免费视频久久| 日本免费a视频| 老司机久久精品| 免费成人在线视频网站| 一级做a爱视频| 美女福利视频在线| 四虎精品欧美一区二区免费| 国产aaaaa毛片| 久久综合久久网| 午夜激情视频网| 天天爽天天爽夜夜爽| av网站大全免费| 999久久久精品视频| 一本大道熟女人妻中文字幕在线| 国产xxxxhd| 欧美一级裸体视频| 国产午夜福利100集发布| 熟女视频一区二区三区| 性欧美videossex精品| 国产一级爱c视频| 老司机午夜免费福利视频| 三上悠亚在线一区| 国产日产欧美视频| wwwwww欧美| 91社在线播放| 潘金莲激情呻吟欲求不满视频| 国产精品欧美激情在线观看| 加勒比成人在线| 久久久久亚洲av无码专区喷水| 亚洲欧美久久久久| 欧美精品aaaa| 成年人黄色片视频| 9久久9毛片又大又硬又粗| 视色,视色影院,视色影库,视色网 日韩精品福利片午夜免费观看 | 别急慢慢来1978如如2| 日本www在线播放| 日韩av中文字幕第一页| 亚洲国产一二三精品无码| 五月六月丁香婷婷| 国产精品视频中文字幕| 亚洲精品视频导航| 成人在线观看黄| 国产亚洲精品网站| 男人天堂999| 国产h视频在线播放| 久久久久久免费看| 真人抽搐一进一出视频| 国产日本在线播放| 大陆av在线播放| 色欲色香天天天综合网www| 免费拍拍拍网站| 霍思燕三级露全乳照| 天堂…中文在线最新版在线| 免费不卡av在线| 男人的天堂狠狠干| 伊人成色综合网| 狠狠爱免费视频| 黄色成人免费看| 污污动漫在线观看| 中文字幕中文在线| 91看片破解版| 中文字幕乱码免费| 免费日韩在线观看| 成人网站免费观看入口| 日韩中文字幕三区| 狠狠热免费视频| 免费成人黄色大片| 日韩视频一二三| 欧美成人高潮一二区在线看| 日本精品一区二区三区四区 | 熟女视频一区二区三区| 久久香蕉视频网站| 蜜桃传媒一区二区三区| 毛片一区二区三区四区| 久久久国产欧美| 亚洲日本黄色片| 久久综合亚洲精品| 国产淫片免费看| 污污动漫在线观看| 在线免费黄色小视频| 久久久久久久香蕉| 91成人在线观看喷潮教学| 国产一级片黄色| 日本特级黄色大片| 霍思燕三级露全乳照| 国产视频在线视频| 国产福利片一区二区| 九一国产精品视频| 成年网站在线播放| 看一级黄色录像| 日韩精品一区二区三区久久| 一起操在线视频| 精品少妇人欧美激情在线观看| 国内外免费激情视频| 操人视频免费看| 六月丁香激情网| 亚洲色图欧美自拍| 131美女爱做视频| 老司机午夜性大片| 国产一级不卡视频| www.99av.com| 国产精品久久久久9999爆乳| 在线观看av网页| 一二三四视频社区在线| 中文字幕av不卡在线| 久久艹国产精品| 中文字幕国产免费| www成人免费| 五月花丁香婷婷| 高清在线观看免费| 一级一片免费播放| 成年人黄色片视频| 青青视频免费在线| 天天干天天综合| 少妇高潮喷水在线观看| 成年人网站av| 麻豆av免费在线| 欧美大黑帍在线播放| 在线看免费毛片| 黑森林福利视频导航| 欧美黄网在线观看| 99中文字幕在线| 噼里啪啦国语在线观看免费版高清版| 欧美 亚洲 视频| 亚洲精品在线视频播放| 亚洲爆乳无码专区| 成人性生活视频免费看| 黄色aaaaaa| 国产 porn| 欧美韩国日本在线| 韩日视频在线观看| 亚洲免费av网| 亚洲va在线va天堂va偷拍| 成人黄色片视频| 国产亚洲黄色片| 伊人久久在线观看| 国产美女视频免费看| 免费看国产黄色片| 欧美xxxxx在线视频|