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

福州網站建設>網站新聞>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咨詢
黄片毛片在线看_天天操天天射天天爽_精品久久久久中文慕人妻 _青娱乐在线免费视频_青青草精品在线视频_日本中文字幕久久_亚洲国产欧美另类_伊人手机在线视频_天天综合永久入口_久久久综合久久
日韩精品专区在线| 欧美成人精品福利| 国产福利一区二区三区视频 | 亚洲一区免费视频| 一区二区三区色| 亚洲午夜免费电影| 日韩一区精品视频| 奇米一区二区三区| 国产一区二区按摩在线观看| 国产精品影视在线观看| 波多野结衣在线aⅴ中文字幕不卡| 成人av电影在线观看| 色综合久久综合网欧美综合网| 91麻豆视频网站| 欧美久久久久久蜜桃| 精品国精品自拍自在线| 国产亚洲成av人在线观看导航| 国产精品久久一卡二卡| 亚洲精品福利视频网站| 久久精品国内一区二区三区| 懂色av一区二区夜夜嗨| 欧美日韩mp4| 国产精品色噜噜| 亚洲3atv精品一区二区三区| 国产老肥熟一区二区三区| 欧美亚洲动漫精品| 久久久美女毛片| 丝袜亚洲另类丝袜在线| 成人性生交大片免费看中文| 欧美一个色资源| 亚洲一区二区美女| 99视频精品全部免费在线| 欧美电视剧在线观看完整版| 有坂深雪av一区二区精品| 国产精品1区2区| 日韩欧美国产一区在线观看| 亚洲资源在线观看| 成人黄色a**站在线观看| 3d成人h动漫网站入口| 亚洲欧美激情一区二区| 懂色av一区二区在线播放| 精品乱人伦一区二区三区| 亚洲午夜久久久久久久久电影院| 成人国产精品免费观看| 久久久99久久| 国产高清一区日本| 国产日韩欧美精品综合| 国产在线乱码一区二区三区| 欧美一区二区三区四区在线观看| 亚洲综合色在线| 91久久国产综合久久| 亚洲欧美日韩一区二区三区在线观看 | 五月天丁香久久| 欧美精品日韩一区| 亚洲成av人片一区二区| 欧美色大人视频| 天堂久久久久va久久久久| 欧美性猛交xxxx乱大交退制版| 亚洲精品久久7777| 欧美午夜一区二区三区| 午夜成人免费电影| 欧美大胆一级视频| 国产乱码字幕精品高清av| 欧美激情综合五月色丁香小说| 成人性生交大片免费| 亚洲欧洲精品成人久久奇米网| 99国产一区二区三精品乱码| 亚洲综合激情网| 日韩视频免费观看高清在线视频| 狠狠色丁香九九婷婷综合五月| 久久久av毛片精品| 91免费视频大全| 美女一区二区视频| 日本一区二区视频在线观看| 一本在线高清不卡dvd| 日本中文字幕一区| 久久久久久久av麻豆果冻| 波多野结衣精品在线| 亚洲电影你懂得| 久久午夜国产精品| 色嗨嗨av一区二区三区| 激情五月激情综合网| 国产精品国产精品国产专区不蜜| 欧美色成人综合| 不卡一二三区首页| 蜜臀av一区二区在线观看| 国产精品日产欧美久久久久| 91精品国产综合久久久久久久久久 | 精品一区二区在线看| 亚洲日本在线a| 精品久久人人做人人爱| 色欲综合视频天天天| 国产精品亚洲综合一区在线观看| 亚洲国产精品精华液网站| 中文字幕乱码一区二区免费| 日韩欧美你懂的| 欧美年轻男男videosbes| 成人免费精品视频| 国内精品伊人久久久久av一坑 | 日韩专区中文字幕一区二区| 综合自拍亚洲综合图不卡区| 久久久久久久久久久黄色| 日韩一区二区免费在线电影 | 欧美日韩一级大片网址| 成人综合在线网站| 国产精品亚洲一区二区三区妖精| 日本怡春院一区二区| 亚洲一区在线观看网站| 亚洲精品老司机| 亚洲精品美国一| 一区二区在线观看av| 亚洲婷婷国产精品电影人久久| 国产亚洲成年网址在线观看| 精品国产一区二区三区av性色| 日韩欧美一级片| 欧美mv和日韩mv国产网站| 欧美哺乳videos| 26uuu精品一区二区| 欧美大尺度电影在线| 久久久久97国产精华液好用吗| 久久午夜免费电影| 国产精品污网站| 一区二区三区视频在线看| 五月天婷婷综合| 久草在线在线精品观看| 国产精品一区二区久久精品爱涩| 国产在线看一区| 国产精品资源网| 92精品国产成人观看免费| 欧美专区亚洲专区| 91精品婷婷国产综合久久| 久久久久久久精| 亚洲一区二区影院| 极品销魂美女一区二区三区| 丁香啪啪综合成人亚洲小说 | 亚洲最大成人综合| 同产精品九九九| 激情小说亚洲一区| 91亚洲永久精品| 日韩一区二区中文字幕| 久久精品亚洲国产奇米99| 日韩理论电影院| 久久成人免费网| 色综合久久久久| 久久久一区二区三区捆绑**| 亚洲精品成人悠悠色影视| 久久精品国产精品青草| 99久久国产综合精品色伊| 日韩午夜在线观看视频| 综合在线观看色| 国产精品77777| 欧美日韩五月天| 国产精品久久久久久亚洲伦| 麻豆成人av在线| 欧美日韩在线精品一区二区三区激情| 久久天堂av综合合色蜜桃网| 午夜av一区二区三区| 色综合婷婷久久| 国产精品欧美一级免费| 激情文学综合插| 5858s免费视频成人| 亚洲综合另类小说| 91麻豆免费在线观看| 国产精品欧美一区二区三区| 国产一区二区调教| 日韩精品一区二区三区视频在线观看| 洋洋成人永久网站入口| av在线播放不卡| 欧美韩国一区二区| 国产二区国产一区在线观看| 日韩精品资源二区在线| 日本vs亚洲vs韩国一区三区二区| 在线视频国内自拍亚洲视频| 日韩美女啊v在线免费观看| av亚洲精华国产精华精| 国产嫩草影院久久久久| 国产成人av一区二区| 国产欧美一区二区三区在线老狼| 激情综合网最新| 久久精品视频在线看| 国产成人精品免费在线| 国产亚洲精久久久久久| 懂色av一区二区三区免费观看 | 国产人久久人人人人爽| 东方aⅴ免费观看久久av| 亚洲国产精品成人综合色在线婷婷| 国产一区二区三区四| 国产精品午夜电影| 欧洲一区二区av| 蜜桃av一区二区| 国产欧美日韩视频在线观看| www.日韩精品| 调教+趴+乳夹+国产+精品| 日韩欧美在线网站| 成人动漫一区二区在线| 亚洲国产婷婷综合在线精品| 精品国产乱码久久久久久影片| 国产福利一区二区三区视频在线| 一区二区欧美视频| 欧美变态口味重另类|