如何计算百分比

时间:2013-07-28 18:20:11

标签: php math formula percentage

我在数学上非常糟糕,我无法计算以下内容.. 我有两列名为experiencelevel

如果experience超过200,则level正在更新为1

如果experience超过500,则level正在更新为2

.... 我的意思是我从未重置experience

所以,我有一个加载条图像,我必须计算百分比的长度。我试过这样的事情

function lvlbar($xp, $level){

if($level == 0)
    {

         $percent = @round(($xp / 200)*100);

   }

    elseif($level == 1){

$percent = @round(($xp / 500)*100);

    }

    elseif($level == 2){

    $percent = @round(($xp / 900)*100);
} 

    elseif($level == 3){
    $percent = @round(($xp / 1400)*100);
} 

    elseif($level == 4){
    $percent = @round(($xp / 1900)*100);
} 

    elseif($level == 5){
    $percent = @round(($xp / 2500)*100);
} 

    elseif($level == 6){
    $percent = @round(($xp / 3200)*100);
} 

    elseif($level == 7){
    $percent = @round(($xp / 4000)*100);
} 

    elseif($level == 8){
    $percent = @round(($xp / 4900)*100);
} 

    elseif($level == 9){
    $percent = @round(($xp / 5800)*100);
} 

    elseif($level == 10){
    $percent = @round(($xp / 6800)*100);
}

return $percent;

}

当你处于等级1以下时它工作正常但是一旦你达到等级2计算出错,百分比从50,60开始等等。 我想这是我的公式。帮帮我

5 个答案:

答案 0 :(得分:2)

你的概念看起来不错,但有一点点错误。体验栏需要为每个级别重置。例如,当经验为350时,您希望显示50%。

这意味着,你的公式是:

下一级别的百分比=当前级别的经验/升级到下一级所需的经验

再次举例:

当经验为350 =(350 - 200)/(500 - 200)= 50%时,百分比为2级

答案 1 :(得分:1)

我没有完全解决问题,因此无法提出确切的解决方案。但肯定是杂乱的重复代码!我认为你划分的那个数字会在同一时间递增。因此,如果不确切知道它是做什么的,那就像:

function goUpLevel(){
  $level++;
  $experienceMax = $level * $experienceLevelMultiplier;
}

然后你发布的功能会更简单,例如:

function lvlbar($xp, $level){
$percent = @round(($xp / $experienceMax)*100);
}

如果你无法找出$ experienceLevelMultiplier的乘数,那么可能是每个级别的值数组,即

$experienceLevelMultiplierArray = array (
1 => 10
2 => 15.5
);

这看起来更好,更好地扩展,更易于管理和理解!如果你描述一下问题的背景,我肯定会有所帮助!

免责声明:我很长时间没有完成PHP,所以请忽略任何错误。我正在传达一个想法,而不是一个确切的解决方案。

答案 2 :(得分:1)

这就是我要做的事情。正如之前的海报提到的那样,你必须在升级时调整xp。

function lvlbar($xp, $level){
  $levels = array(
      0 => 200,
      1 => 500,
      2 => 900,
      3 => 1400,
      4 => 1900,
      5 => 2500,
      6 => 3200,
      7 => 4000,
      8 => 4900,
      9 => 5800,
      10 => 6800
  );
  if (array_key_exists($level, $levels)) {
    $lastlevelXp = !empty($levels[$level-1]) ? $levels[$level-1] : 0;
    $adjustedXp = $xp - $lastlevelXp;
    $adjustedLevelMax = $levels[$level] - $lastlevelXp;
    $percent = round(($adjustedXp / $adjustedLevelMax)*100);
  }
  return !empty($percent) ? $percent : 0;
}

示例输出:

Level 0 with 95xp:   48%
Level 1 with 370xp:  57%
Level 2 with 640xp:  35%
Level 3 with 1150xp: 50%
Level 4 with 1405xp: 1%
Level 5 with 2400xp: 83%
Level 6 with 3180xp: 97%
Level 7 with 3999xp: 100%

答案 3 :(得分:0)

如果你的问题是3级,请查看你的数学条件:

elseif($level == 3){
    $percent = @round(($xp / 1400)*100);
}

如果您说的话,如果$ xp = 900,请使用计算器并将其除以1400,如上面的计算所示。

然后将结果乘以100,并且舍入结果为64%,因此数学正确返回,这只是错误的等式。

答案 4 :(得分:0)

如果您希望百分比栏回到0(不包括以前在栏中的经验),您需要减去上一级别的金额。

另外,我建议使用开关()。

试试这个:

function lvlbar($xp, $level){
  switch($level) {
    case 0:
      $percent = @round(($xp / 200)*100);
    case 1:
      $percent = @round((($xp - 200) / 500)*100);
    case 2:
      $percent = @round((($xp - 500) / 900)*100);
    case 3:
      $percent = @round((($xp - 900) / 1400)*100);
    case 4:
      $percent = @round((($xp - 1400) / 1900)*100);
    case 5:
      $percent = @round((($xp - 1900) / 2500)*100);
    case 6:
      $percent = @round((($xp - 2500) / 3200)*100);
    case 7:
      $percent = @round((($xp - 3200) / 4000)*100);
    case 8:
      $percent = @round((($xp - 4000) / 4900)*100);
    case 9:
      $percent = @round((($xp - 4900) / 5800)*100);
    case 10:
      $percent = @round((($xp - 5800) / 6800)*100);
  }
  return $percent;
}