[PHP] 自製金錢分攤函式

近日在工作上應該會需要計算金錢分攤,簡單寫了個 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