关于微信支付 支付宝支付价格精度问题

微信支付上遇见少一分钱的问题,但是支付宝没有此问题,查找之后,确定问题出在微信价格单位按分算,支付宝是按元计算,
因为数据库使用decimal 保留两位小数,这和支付宝一致,在微信支付时取出数据库保存的价格*100再转int ,问题就出在这里,float转int精度损失。
[root@yunduanlocal api]# php -r "var_dump((int)(18.90*100));"
int(1889)

知道问题所在就好办了。
解决方法有两种:
1. 利用四舍五入:
[root@yunduanlocal api]# php -r "var_dump((int)(18.90*100 + 0.5));"
int(1890)
下面例子可以说明php float转int
echo '<pre>';
$a=0.11;
$b=(int)$a; //$b=0;
echo $b.'<br>';
$a=0.99;
$b=(int)$a; //$b=0;
echo $b.'<br>';
$a=1.11;
$b=(int)$a; //$b=1;
echo $b.'<br>';
$a=1.99;
$b=(int)$a; //$b=1;
echo $b.'<br>';



2.利用php bc数学函数库:
[root@yunduanlocal api]# php -r "var_dump((int)bcmul(18.90, 100));"
int(1890)
[root@yunduanlocal api]# php -r "var_dump((int)bcmul('18.90', '100'));"
int(1890)

bc函数库文档:http://php.net/manual/zh/ref.bc.php


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值