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

自己运营的16楼房产网,起初做这个项目的时候偷懒了,用户填写了所在楼层和总楼层,前台会直接进行显示,这样就有一种信息暴露,有心的中介会根据楼层把这个小区所有的当前层住户全部找一遍来抢房源。
所以要根据总楼层来判断用户所填写的楼层是属于低层、中层还是高层。
1,我需要把总楼层分成3份
2,判断当前楼层在总楼层的那个阶段
3,生成字段前台显示。

具体实现方法(网上找到的算法):
有的时候,你可能有这种需求,需要将一个数字分为N等份,多余的自动分配给其中一个数字。
实现方法有如下两种,当然还有其他的,比如截取substr等,有兴趣的可以自己尝试:
第一种方法,采用bc函数,即PHP的数学扩展库bcmath,具体可以点击如下链接查看更多了解
BC数学函数     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($last_number, $index, '.', '');
// 拼装平分后的数据返回
$number_str = str_repeat($divide_number . ',', $total - 1) . $last_number;
return explode(',', $number_str);
}

1. 本站所有资源来源于用户上传和网络,仅作为演示数据,如有侵权请邮件联系站长!
2. 本站文章转载,请注明出自缓冲区实验室(SZBUFFER) - www.szbuffer.com。
缓冲区实验室 » PHP算法:一个数字平分为N份,并且总值相等

发表评论