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

相关文章
相关标签/搜索