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时 调起支付时会存在金额误差
会导致支付失败
本文讨论了PHP中使用intval()处理高精度浮点数时可能出现的精度误差,特别是在微信支付场景下,19.90乘以100后的结果可能略低于预期,导致支付失败。作者通过示例展示了intval()、round()和strval()的不同行为。
1116

被折叠的 条评论
为什么被折叠?



