在我的wordpress主题功能之一中,此代码用于计算总可结算金额:ceil(($cost * (1 + ($charges / 100))) * 100);
在以下情况下,会发生一些误算。
场景:
$charges = 9;
$cost = 100;
echo ceil(($cost * (1 + ($charges / 100))) * 100);
以上代码输出10901
,而应为10900
。
对于其他情况,它工作正常:
$charges = 4;
$cost = 90.7;
echo ceil(($cost * (1 + ($charges / 100))) * 100);
//outputs 9433, which is fine because manual calculation results 9432.8
问题:
答案 0 :(得分:2)
问题是您正在将ceil应用于外部表达式。尝试将其重写为:
$charges = 9;
$cost = 100;
echo ($cost + ceil($cost * $charges / 100)) * 100;
这将按预期输出10900
。
更新
按照@ cars10m的建议,简化表达式确实有帮助:
echo ceil($cost * 100 + $cost * $charges);
更新2
您还可以使用BCMath库进行精确的数学运算:
bcscale(6);
echo ceil(bcadd(bcmul($cost, 100), bcmul($cost, $charges)));