在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发起支付就行了。