高清国产美女一级毛片_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免费_久久久久久久综合_国产精品爱久久久久久久电影

        成人午夜视频免费在线观看| 自慰无码一区二区三区| 搞av.com| 一个色综合久久| 欧美成人xxxxx| 凹凸国产熟女精品视频| 国产精品一色哟哟| 99在线观看视频免费| 日日碰狠狠躁久久躁婷婷| 中文字幕第一页亚洲| 五月婷婷六月丁香激情| 国产视频一区二区三区在线播放| 国产xxxxx在线观看| 久草资源站在线观看| www国产精品内射老熟女| 欧美综合在线播放| 日韩a∨精品日韩在线观看| 日韩精品久久一区二区| 蜜臀精品一区二区| 欧美一区二区三区爽大粗免费| 97国产精东麻豆人妻电影| 人妻有码中文字幕| 欧美 日韩 国产 激情| 久热精品在线播放| 色黄视频免费看| 青青在线免费视频| 黄页网站在线观看视频| 无码人妻丰满熟妇区毛片18| 自拍偷拍 国产| 青青草久久伊人| 一区二区三区日韩视频| 久久视频免费在线| 激情综合在线观看| 三级在线免费看| 久久久福利影院| 国产精品一色哟哟| 国模杨依粉嫩蝴蝶150p| 在线观看国产福利| 国产一二三四五| 精品无码国模私拍视频| 国产成人精品视频ⅴa片软件竹菊| 999精品视频在线| 无罩大乳的熟妇正在播放| 免费黄色特级片| 婷婷中文字幕在线观看| 99re8这里只有精品| 人妻熟妇乱又伦精品视频| 亚洲天堂av线| 天天干天天色天天爽| 无码 制服 丝袜 国产 另类| 日日碰狠狠躁久久躁婷婷| 日日干日日操日日射| 97视频在线免费| 国产又黄又大又粗视频| 好男人www社区| 日本女人高潮视频| 中国丰满人妻videoshd| 日韩在线一区视频| 国产视频一视频二| 老太脱裤子让老头玩xxxxx| 91日韩视频在线观看| 4444在线观看| 欧美少妇性生活视频| 男人j进女人j| 亚洲成人av免费看| 91黄色在线看| 国产三级精品三级在线| 蜜桃传媒一区二区三区| 国产精品久久久久久久av福利| 国产特级淫片高清视频| 色撸撸在线观看| 成年网站在线免费观看| 久久久无码中文字幕久...| 男女曰b免费视频| 国风产精品一区二区| 亚洲欧美久久久久| 国产二区视频在线播放| 91大学生片黄在线观看| 在线观看免费成人av| 日韩精品久久一区二区| 亚洲视频一二三四| 三级4级全黄60分钟| 人人妻人人澡人人爽欧美一区 | 国产 欧美 日韩 一区| 精品www久久久久奶水| 一本大道东京热无码aⅴ| 手机看片一级片| 国产精品亚洲二区在线观看| 性高湖久久久久久久久aaaaa| 久久国产这里只有精品| 超碰97人人射妻| 蜜臀精品一区二区| 国产成人免费高清视频| 最新免费av网址| 99热这里只有精品在线播放| 欧美牲交a欧美牲交aⅴ免费真| 丁香婷婷综合激情| 少妇高潮大叫好爽喷水| 中文字幕日韩久久| 不用播放器的免费av| 自慰无码一区二区三区| 美女在线免费视频| 手机成人av在线| 在线视频一二区| 伊人影院综合在线| 亚洲精品高清无码视频| 午夜肉伦伦影院| 欧美 日韩 国产一区| 国产男女免费视频| 九色自拍视频在线观看| 无码人妻少妇伦在线电影| 国产xxxx振车| 国产无限制自拍| av免费观看国产| 久久久一本二本三本| 国产h视频在线播放| 免费无码不卡视频在线观看| 97国产精东麻豆人妻电影| 国产男女无遮挡| 日韩在线第三页| 亚洲成人福利在线观看| 日本三级黄色网址| 在线免费黄色网| 六月婷婷激情网| 日韩精品综合在线| jizzjizz国产精品喷水| 爱福利视频一区二区| 亚欧在线免费观看| 国产乱女淫av麻豆国产| 欧美日韩一区二区三区电影| 污污污污污污www网站免费| 男人添女荫道口图片| 人妻熟妇乱又伦精品视频| 国产成人无码av在线播放dvd| 一区二区三区入口| 国产高清av片| 台湾无码一区二区| 三上悠亚久久精品| 热久久精品免费视频| 婷婷激情综合五月天| 日韩a级黄色片| 久久精品国产精品亚洲色婷婷| 日本精品久久久久中文字幕| www.精品在线| 成人性做爰片免费视频| 国产精品又粗又长| 日韩一级理论片| 一本二本三本亚洲码 | 欧美亚洲日本在线观看| 亚洲这里只有精品| 51xx午夜影福利| av天堂永久资源网| 91看片破解版| 欧美日韩福利在线| 国产野外作爱视频播放| 三级网在线观看| 黄色a级片免费| 奇米777在线视频| 青青青国产在线观看| 182午夜在线观看| 成品人视频ww入口| 国产3p在线播放| 777av视频| 日韩视频在线观看一区二区三区| www.日本少妇| av中文字幕网址| 少妇无码av无码专区在线观看| 久热精品在线播放| 久久黄色片视频| 手机成人av在线| 久久精品一区二| 欧美激情亚洲天堂| 奇米视频888| 欧美精品一区免费| 国产系列第一页| 亚洲一二三区av| 久久综合久久网| 午夜一区二区视频| www一区二区www免费| 一区二区三区四区免费观看| 黄色片一级视频| 国产a级黄色大片| 色一情一区二区三区| 337p粉嫩大胆噜噜噜鲁| 强开小嫩苞一区二区三区网站| 网站一区二区三区| 国产午夜伦鲁鲁| 国产黄色激情视频| 天美一区二区三区| av网站在线不卡| 男人靠女人免费视频网站| 国产在线视频综合| 欧美性猛交xxxx乱大交91| 粉嫩虎白女毛片人体| 国产手机免费视频| 法国空姐在线观看免费| 免费成人黄色大片| 欧美三级午夜理伦三级富婆| 无码人妻丰满熟妇区毛片18| 欧美午夜性视频|