您的位置:首页 > 其它

模拟计算超越全国百分比计算方式

2017-12-27 14:51 106 查看
最近有个小需求,根据输入的数字,判断超越全国百分多少用户,首先老子肯定是搞不到全国用户的数据的,然后想了半天模拟方式;

百度后各种函数都出来了,作为屌丝的我函数认识我,我不认识他,而且还贼复杂,最后使用了最简单的方式实现了

然后代码如下:

/**
*  模拟计算超越全国百分之多少的计算方法类
* @param $money
* create by lizhanqi(forbidden change code if you need tell to me)
* 禁止改动,如需改动联系我
* 百元以内几十的跳动无效果
*/
public function calcPercent($money) {
//防止负数
if($money<0){
$money=0;
}
$simpleMoney=    $money /10000;
//达到多少
//[2,5,35,65,85,90,97,98]
$reach =[5,15,25,35,55,75,95,100];
//百分比当达到100万的时候需要达到98
$arrsPercent =[2,5,35,65,85,90,97,98];
//    echo "<br/>".$simpleMoney."万";
$grade =0;
foreach($reach as &$value){
if($value<$simpleMoney){
$grade ++;
}
}
//        echo "<br/>等级:".$grade."<br/>";
//下面的判断也可以根据等级判断
if($grade==0){//小于等于5万
$weight= $arrsPercent[$grade]/$reach[$grade]/100;//百元元的权重
$temp= $money/100*$weight;
return "超越全国:".($temp);
}elseif($grade<sizeof($reach)){//其他情况
$residue=  $simpleMoney-$reach[($grade-1)];//超出上个等级的金额(万元)
$percentDiff= $arrsPercent[$grade] - $arrsPercent[($grade-1)] ;//比例差(万元的)
$moneyDiff= $reach[$grade] - $reach[($grade-1)] ;//等级的金额差(万元)
$weight = $percentDiff/$moneyDiff/100;//超出的权重,万元
return "超越全国:".($arrsPercent[($grade-1)]+$residue*100*$weight);
}else{//大于百万
//基础的分数,这里是最好高分值
$baseGrade =$arrsPercent[(sizeof($arrsPercent)-1)];
//超出的钱(万元)
$moreMoney =$simpleMoney-$reach[(sizeof($reach)-1)];
//剩余百分比
$residualFraction= 100-$arrsPercent[(sizeof($arrsPercent))];
//每万元所占剩余分数的权重
$weight = $residualFraction/1000000;

$score=$moreMoney*$weight+$baseGrade;
if($score>=100){
$score ="厉害了!我的哥 ";
}
return"超越全国:". $score;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: