黄片毛片在线看_天天操天天射天天爽_精品久久久久中文慕人妻 _青娱乐在线免费视频_青青草精品在线视频_日本中文字幕久久_亚洲国产欧美另类_伊人手机在线视频_天天综合永久入口_久久久综合久久

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

踩坑之json_encode精度丟失問題

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

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| 日韩精品一区二区三区四区视频 | 色综合天天性综合| 色婷婷综合久色| 欧美体内she精高潮| 51精品国自产在线| 精品三级在线观看| 中文字幕在线播放不卡一区| 亚洲图片另类小说| 视频一区二区欧美| 国产一区不卡视频| 91视频免费观看| 欧美精品 日韩| 国产日本一区二区| 亚洲电影视频在线| 国产一区二区毛片| 91视频观看视频| 日韩三级中文字幕| 国产精品三级av在线播放| 亚洲一区二区三区四区在线观看| 青青草伊人久久| 成人av综合一区| 91精品国产高清一区二区三区| 精品欧美乱码久久久久久| 国产欧美日韩一区二区三区在线观看 | 丝袜美腿成人在线| 成人免费不卡视频| 欧美精品黑人性xxxx| 国产欧美日韩综合| 久久成人综合网| 成人aa视频在线观看| 欧美一区二区视频观看视频| 国产精品国产三级国产aⅴ入口 | 一区二区三区丝袜| 国产尤物一区二区| 日韩一区二区影院| 亚洲不卡一区二区三区| 91在线视频免费91| 国产精品天干天干在观线| 免费欧美在线视频| 91精品久久久久久久99蜜桃 | 国产在线国偷精品免费看| 欧美精品xxxxbbbb| 亚洲丰满少妇videoshd| 91在线观看污| 亚洲欧美中日韩| 国产a区久久久| 欧美国产禁国产网站cc| 国产高清精品久久久久| 日韩视频免费直播| 久久精品免费观看| www亚洲一区| 国产精品一区二区男女羞羞无遮挡| 日韩一区二区中文字幕| 国内精品久久久久影院色| 日韩欧美黄色影院| 国产精品18久久久久久vr| 欧美精品一区二区三区蜜桃 | 国产传媒日韩欧美成人| 国产女同性恋一区二区| 成人国产电影网| 亚洲色图一区二区三区| 欧洲精品一区二区| 香蕉久久夜色精品国产使用方法| 欧美色精品天天在线观看视频| 亚洲一区二区三区四区五区中文| 欧美精品aⅴ在线视频| 久久91精品国产91久久小草| 亚洲国产电影在线观看| 欧美影院一区二区三区| 狠狠色综合色综合网络| 国产精品伦理在线| 欧美一区二区三级| 成人黄色片在线观看| 亚洲丶国产丶欧美一区二区三区| 欧美电影免费观看高清完整版| 国产乱码精品一品二品| 亚洲欧美偷拍三级| 亚洲精品一区二区三区香蕉| 色综合久久久久久久| 九九国产精品视频| 一卡二卡三卡日韩欧美| www欧美成人18+| 在线不卡免费欧美| 91在线porny国产在线看| 免费看黄色91| 亚洲一区在线观看视频| 国产亚洲欧美激情| 欧美一级二级三级乱码| 日本久久一区二区三区| 成人综合婷婷国产精品久久蜜臀 | 成人97人人超碰人人99| 欧美aaaaaa午夜精品| 亚洲永久免费av| 中文字幕在线观看不卡| 久久久久国产精品厨房| 欧美一区二区三区四区在线观看| av激情成人网| 成人激情av网| 国产精品一区二区91| 免费一级片91| 偷拍日韩校园综合在线| 一区二区三区四区国产精品| 亚洲图片你懂的| 亚洲欧洲av在线| 综合色中文字幕| 亚洲视频一区二区在线| 国产精品免费视频网站| 中文字幕av资源一区| 国产亚洲自拍一区| 国产欧美日韩视频在线观看| 国产欧美精品日韩区二区麻豆天美| 精品奇米国产一区二区三区| 久久美女艺术照精彩视频福利播放| 日韩你懂的在线播放| 久久影院电视剧免费观看| 久久人人爽人人爽| 国产精品久久毛片av大全日韩| 国产精品嫩草99a| 一区二区三区在线不卡| 性欧美疯狂xxxxbbbb| 青青草国产精品97视觉盛宴| 日本特黄久久久高潮| 国内精品久久久久影院一蜜桃| 国产美女一区二区三区| 国产一区在线观看视频| 国产xxx精品视频大全| 97精品久久久午夜一区二区三区 | 国产九九视频一区二区三区| 国产精品18久久久久久久久| 顶级嫩模精品视频在线看| 色噜噜狠狠一区二区三区果冻| 欧美日韩视频在线第一区| 7777女厕盗摄久久久| 精品国产百合女同互慰| 国产精品国产成人国产三级| 亚洲国产精品久久不卡毛片| 日本三级韩国三级欧美三级| 国产一区二区三区免费看| 97久久超碰国产精品电影| 69堂国产成人免费视频| 国产欧美一区在线| 一区二区高清在线| 国产一本一道久久香蕉| 欧美日本韩国一区二区三区视频| 久久久久久久久久久久久夜| 亚洲国产综合91精品麻豆 | 成人国产精品免费观看| 欧美一区二区三区四区高清| 国产精品日韩成人| 蜜桃视频第一区免费观看| 日本丰满少妇一区二区三区| 国产视频在线观看一区二区三区 | 一区二区三区视频在线看| 国产乱子伦一区二区三区国色天香| 91蜜桃传媒精品久久久一区二区| 精品国产乱码久久久久久闺蜜| 亚洲国产日日夜夜| 日本高清不卡aⅴ免费网站| 国产精品妹子av| 国产91精品露脸国语对白| 欧美xxxxxxxx| 青草国产精品久久久久久| 欧美日韩一区国产| 一区二区三区日韩欧美| 国产91精品欧美| 中文字幕精品三区| 丁香啪啪综合成人亚洲小说| 国产香蕉久久精品综合网| 国产一区二区精品久久91| 精品蜜桃在线看| 青青草伊人久久| 精品国产乱码久久久久久浪潮 | 91视频.com| 亚洲日本中文字幕区| 国产成人免费视| 亚洲国产电影在线观看| 国产1区2区3区精品美女| 久久综合九色综合97婷婷| 国产一二精品视频| 中文字幕一区二区三| 91在线丨porny丨国产| 自拍偷拍亚洲综合| 欧美亚洲尤物久久| 午夜精品久久久久久久久| 欧美另类一区二区三区| 免费一级欧美片在线观看| 精品捆绑美女sm三区| 国产精品影视网| 国产三级欧美三级日产三级99| 国产成人精品免费网站| 国产精品人人做人人爽人人添| 色综合天天天天做夜夜夜夜做| 亚洲一区二区在线观看视频 | 久久久久久久久久电影| 不卡区在线中文字幕| 亚洲午夜激情av|