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时 调起支付时会存在金额误差
会导致支付失败