intval()精度问题 常见场景微信支付失败调起支付后金额不对等

PHP 计算高精度金额时 intval()会有误差 导致支付失败

PHP 精度计算时

浮点数的精度问题可能会导致意外的结果。在计算机内部,浮点数的表示不是完全精确的,可能存在微小的误差。因此,19.90 * 100 得到的结果可能是一个略微小于 1990 的浮点数。

示例

   $a =  intval(19.90 * 100);
   $b =  intval(round(19.90 * 100));
   $c =  intval(strval(19.90 * 100));
    var_dump($a);
    var_dump($b);
    var_dump($c);

对应的结果:
$a: 1989
$b: 1990
$c: 1990

使用场景

微信支付 : 微信支付时价格计算
PHP 微信支付 微信支付必须为19.99 小数点后两位
当金额为 19.90 最后一位为0时 调起支付时会存在金额误差
会导致支付失败

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值