支付宝支付 json_encode 浮点数字下单出错的问题

支付宝支付 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);

添加新评论