Installment分期付款计算函数出错 14.75%佣金交易结果不符如何修正
问题根因
- 你当前使用的计算公式逻辑与需求不符:
fPrice / (1 - 佣金比例/100)是「已知含佣总金额,倒推不含佣本金」的计算逻辑,代入你给出的参数计算正好得到你遇到的错误结果:100 / (1 - 14.75/100) ≈ 117.30 - 你的实际需求是「在本金基础上叠加固定比例佣金」,正确的计算逻辑应为
本金 * (1 + 佣金比例/100),代入参数得到的结果正好符合预期:100 * (1 + 14.75/100) = 114.75
修正后的代码
$install = DB::getRow("SELECT installment FROM installments WHERE id='{$k}'"); // 先统一处理佣金比例格式 $commissionRate = (float)str_replace(",", ".", $i) / 100; $total = round($mInfo->fPrice * (1 + $commissionRate), 2); $monthly = round($total / $install->installment, 2);
额外优化建议
- 避免精度误差:先计算总金额再除以分期数计算月供,比分开两次计算本金部分更不容易出现精度偏差
- 注意SQL注入风险:你当前的查询直接拼接变量
$k到SQL语句中,建议改为参数绑定的查询方式,避免注入风险
内容的提问来源于stack exchange,提问作者Xcopy
相关产品推荐
相关产品推荐

