PHP算法:一個數字平分爲N份,而且總值相等

有的時候,你可能有這種需求,須要將一個數字分爲N等份,多餘的自動分配給其中一個數字。php

實現方法有以下兩種,固然還有其餘的,好比截取substr等,有興趣的能夠本身嘗試:ide

第一種方法,採用bc函數,即PHP的數學擴展庫bcmath,具體能夠點擊以下連接查看更多瞭解函數

BC數學函數 http://php.net/manual/zh/ref.....net

很少說了,直接上代碼:code

* 一個數字平分爲N等份
* @param int $number 待平分的數字
* @param int $taotl 平分總個數
* @param int $index 保留小數位
*/
function getDivideNumber($number, $total, $index = 2) {
    // 除法取平均數
    $divide_number  = bcdiv($number, $total, $index);
    // 減法獲取最後一個數
    $last_number = bcsub($number, $divide_number*($total-1), $index);
    // 拼裝平分後的數據返回
    $number_str = str_repeat($divide_number.'+', $total-1).$last_number;
    return explode(',', $number_str);
}

第二種方法,是我自定義的一種方法,大概思路是將待平分的數字乘以10的N次方,而後平分floor捨去取整,再除以10的N次方獲得平分數,再用減法獲取最後一個數,並格式化小數位,具體實現方法以下:orm

/**
* 一個數字平分爲N等份
* @param int $number 待平分的數字
* @param int $taotl 平分總個數
* @param int $index 保留小數位
*/
function getDivideNumber($number, $total, $index = 2) {
    // 取平均數
    $divide_number = floor($number / $total * pow(10, $index)) / pow(10, $index);
    $divide_number = number_format($divide_number, $index, '.', '');
    // 獲取最後一個數字
    $last_number = $number - $divide_number * ($total - 1);
    $last_number = number_format_plus($last_number, $index, '.', '');
    // 拼裝平分後的數據返回
    $number_str = str_repeat($divide_number . ',', $total - 1) . $last_number;
    return explode(',', $number_str);
}

有說的不對的地方,請你們理解,歡迎留言,相互交流。get

相關文章
相關標籤/搜索