资讯专栏INFORMATION COLUMN

PHP算法:一个数字平分为N份,并且总值相等

Eric / 2776人阅读

摘要:有的时候,你可能有这种需求,需要将一个数字分为等份,多余的自动分配给其中一个数字。

有的时候,你可能有这种需求,需要将一个数字分为N等份,多余的自动分配给其中一个数字。

实现方法有如下两种,当然还有其他的,比如截取substr等,有兴趣的可以自己尝试:

第一种方法,采用bc函数,即PHP的数学扩展库bcmath,具体可以点击如下链接查看更多了解

BC数学函数 http://php.net/manual/zh/ref....

不多说了,直接上代码:

* 一个数字平分为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次方得到平分数,再用减法获取最后一个数,并格式化小数位,具体实现方法如下:

/**
* 一个数字平分为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);
}

有说的不对的地方,请大家理解,欢迎留言,相互交流。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28848.html

相关文章

  • 数据结构与算法(数组) --javascript语言描述

    摘要:如果下标为的位置上已经有数字了,则说明该数字重复了。二维数组中的查找在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 找出数组中重复的数字 n个数字,且数字都在0到n-1范围内思路:从头到尾扫描数组每个数字,当扫描到下标为i的数字m时,首先比较m是不是等于i,如果是,继...

    MycLambert 评论0 收藏0
  • 三子棋游戏设计及代码实现

    摘要:三子棋三子棋游戏介绍规则游戏设计思路代码分析文件代码分析。玩家下棋实现。三子棋是一种民间传统游戏,又叫九宫棋圈圈叉叉一条龙井字棋等。落子后打印棋盘以显示。假设平局时判定输赢的函数返回后面代码实现时详细讲。 ...

    Ku_Andrew 评论0 收藏0
  • 【机器学习】回归算法-精讲

    摘要:回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。 回归算法 回归算法线性回归和非线性回归: 线性回...

    mtunique 评论0 收藏0
  • 浅谈附近地点搜索

    摘要:编码的前缀可以表示更大的区域,查找附近的,非常方便。百度拾取坐标地址编码精度为位时,大概为附近千米。在经度相等的情况下纬度每隔度,距离相差约米每隔度,距离相差约米每隔度,距离相差约米每隔度,距离相差约米每隔度,距离相差约米。 随着移动端的普及,很多 App应用 都有 LBS 功能。 附近的银行、 附近的饭店、 附近的超市、 附近的厕所、 ... 以上的需求很类似,实现的原理也大致相同。...

    褰辩话 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<