支付宝支付 json_encode 浮点数字下单出错的问题
简单描述
线上app支付宝支付有一个客户返回支付参数有误,客户买了一个商品共15件,打98折。优惠后的价格为2528.4,但是查看日志传给支付宝的参数一直是2528.4000000000001
原因:json_encode 浮点数会造成精度缺失
问题代码
https://blog.csdn.net/m0_46266407/article/details/105556444
$payMoney =round($req['pay_money'],2);
tolog("下单测试:".json_encode($req));
$prams = [
'body' => '测试订单',
'subject' => '测试订单',
'out_trade_no' => strval($req['union_pay_order_id']),
'timeout_express' => '30m',
'total_amount' =>$payMoney,
'product_code' => 'QUICK_MSECURITY_PAY',
];
tolog("订单金额:".$payMoney);
tolog($prams);
[INFO] [2021-03-23 09:59:02] 订单金额:2528.4 {"url":"/order/order/payment"}
[INFO] [2021-03-23 09:59:02] {"body":"测试订单","subject":"测试订单","out_trade_no":"266464735814","timeout_express":"30m","total_amount":2528.4000000000001,"product_code":"QUICK_MSECURITY_PAY"} {"url":"/order/order/payment"}
解决办法
解决办法:(string)进行强制转换
$payMoney = (string)round($req['pay_money'],2);