博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP算法:一个数字平分为N份,并且总值相等
阅读量:7082 次
发布时间:2019-06-28

本文共 1324 字,大约阅读时间需要 4 分钟。

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

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

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

     http://php.net/manual/zh/ref.bc.php

不多说了,直接上代码:

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

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

转载地址:http://czmml.baihongyu.com/

你可能感兴趣的文章
模态窗口被IE 7给糟蹋得不成样子了
查看>>
你不知道的Spring配置文件
查看>>
Spark源码分析之Spark-submit和Spark-class
查看>>
SOA系列之基本特性
查看>>
js中的"=="和equals()以及is()三者的区别
查看>>
谨慎注意WebBrowser控件的DocumentCompleted事件
查看>>
回头再说 005 --温暖的文字和音乐
查看>>
C#进行Visio二次开发之电气线路停电分析逻辑
查看>>
简便无刷新文件上传系统
查看>>
匆匆的记录一下,生日快乐!
查看>>
[链接]实现GEF程序中的剪切/复制/粘贴功能
查看>>
lucene 的评分机制
查看>>
Backup Volume 操作 - 每天5分钟玩转 OpenStack(59)
查看>>
JavaWeb之tomcat安装、配置与使用(一)
查看>>
SpringMVC Controller 返回值的可选类型
查看>>
kbmmw 5.03 发布
查看>>
iOS - App 与外设间的通信方式
查看>>
13.7. Device Management
查看>>
Hibernate详细教程
查看>>
144.2. tcpdump - A powerful tool for network monitoring and data acquisition
查看>>