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

来源:互联网 发布:网络彩票合法吗 编辑:程序博客网 时间:2024/04/29 20:00
微信支付上遇见少一分钱的问题,但是支付宝没有此问题,查找之后,确定问题出在微信价格单位按分算,支付宝是按元计算,
因为数据库使用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


1 0
原创粉丝点击