近日在工作上應該會需要計算金錢分攤,簡單寫了個 PHP 函式備用。
function shareAmount( $amount , $shares ) { $arr = array(); if ( is_numeric($amount) && is_int($shares) ) { $precision = is_int($amount) ? 0 : strlen(substr($amount, strpos($amount, '.')+1)); for ( $i = $shares; $i > 0; $i-- ) { $val = round( $amount / $i , $precision ); array_push( $arr , $val ); $amount -= $val; } } return $arr; }
執行結果大概像這樣:
// var_dump( shareAmount(101,3) ); array(3) { [0]=> float(34) [1]=> float(34) [2]=> float(33) } // var_dump( shareAmount(0.5101,3) ); array(3) { [0]=> float(0.17) [1]=> float(0.1701) [2]=> float(0.17) }
我在資料庫沒看到大數,所以就沒考慮 BC Math,直接用 is_numeric() 了… :p