如何计算百分比


How to calculate percentages

我数学真的很差,我不会计算下面的东西。。我有两列,分别命名为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左右开始。。我想这是我的公式。帮助我完成

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

这意味着,你的公式是:

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

再次举个例子:

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

我并不完全理解这个问题,因此无法提出确切的解决方案。但这肯定是混乱的重复代码!我认为最好是你们除以的那个数字在同一时间增加。所以在不知道它在做什么的情况下,比如:

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

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

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

如果你无法计算$experienceLevelMultiplier的乘数,那么可以为每个级别计算一组值,即

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

这看起来更好,规模更好,更易于管理和理解!如果你描述一下这个问题的背景,我肯定能帮上忙!

免责声明:我已经很久没有做PHP了,所以请忽略任何错误。我在传达一个想法,而不是一个确切的解决方案。

这几乎是我要做的。正如之前的海报所提到的,在升级时必须调整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级,请查看您的数学条件:

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

如果$xp=900,请使用计算器,并将其除以1400,就像上面的计算一样。

然后将结果乘以100,四舍五入的结果是64%,所以数学回归正确,这只是一个错误的方程。

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

此外,我建议使用switch()。

试试这个:

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;
}