微信支付API V3 缺少1分钱问题的解决办法

本文讲述了在PHP7.4环境下使用微信支付APIV3时遇到的精度问题,通过比较三种金额转换方法(乘以100、intval和bcmul)发现,方法三(bcdmul确保无精度丢失)是处理16进制小数支付金额的最佳解决方案。
摘要由CSDN通过智能技术生成

在PHP7.4上用微信支付API V3,一开始,总是偶尔遇到少一分钱的问题,差点被祭天。

后来,发现是精度的问题。

假设金额为16.15元,

$amt = 16.15;

//方法一
$pay_amt = $amt*100;

//方法二
$pay_amt = intval($amt*100);

//方法三
$pay_amt = bcmul((string)$amt,'100',0);

方法一小概率会出现结果为1615.00000001;

方法二因为精度问题,偶尔出现结果为1614;

只有方法三才是终极办法。

最后,将pay_amt转换为int类型,向API发起支付就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值