php实现找零
PHP实现找零的方法
找零算法在商业应用中非常常见,尤其是在收银系统中。以下是几种PHP实现找零的方法:
方法一:基础找零实现
function calculateChange($total, $payment) {
$change = $payment - $total;
if ($change < 0) {
return "付款金额不足";
}
return $change;
}
方法二:分解为纸币和硬币

function makeChange($amount) {
$denominations = [100, 50, 20, 10, 5, 1, 0.25, 0.10, 0.05, 0.01];
$change = [];
foreach ($denominations as $coin) {
while ($amount >= $coin) {
$change[] = $coin;
$amount -= $coin;
$amount = round($amount, 2); // 处理浮点数精度问题
}
}
return $change;
}
方法三:优化找零算法
function optimalChange($amount) {
$denominations = [100, 50, 20, 10, 5, 1, 0.25, 0.10, 0.05, 0.01];
$change = [];
foreach ($denominations as $coin) {
$count = floor($amount / $coin);
if ($count > 0) {
$change[$coin] = $count;
$amount -= $count * $coin;
$amount = round($amount, 2);
}
}
return $change;
}
方法四:面向对象实现

class ChangeCalculator {
private $denominations = [100, 50, 20, 10, 5, 1, 0.25, 0.10, 0.05, 0.01];
public function calculate($amount) {
$change = [];
foreach ($this->denominations as $coin) {
$count = floor($amount / $coin);
if ($count > 0) {
$change[$coin] = $count;
$amount -= $count * $coin;
$amount = round($amount, 2);
}
}
return $change;
}
}
注意事项
浮点数计算可能存在精度问题,建议使用整数进行计算(如以分为单位)或使用PHP的BC Math扩展处理高精度计算。
对于商业应用,建议添加输入验证和异常处理,确保金额的有效性和系统的健壮性。






