PHP的数字精度问题
其实这是一个老生长谈的问题,但很多同学不看手册 可能都没注意!
在向微信发送请求参数时,尤其是金额,需要把元转换为分,直接乘以100就可以,但是又使用了转化整数类型的函数:
int 或者 intval 结果都会少1
由于浮点类型的数字通过内部二进制转换得到结果,就是浮点类型的计算都会丢失精度的。
需要先使用strval() 函数将变量转成字符串类型
测试代码
$a = "310.40";
$b = $a*100;
$c = intval(strval($a*100)); //正确的处理方式
var_dump($b,$c);
setRefundFee($b);
setRefundFee($c);
function setRefundFee(int $refundFee): void
{
var_dump('refundFee',$refundFee);
}