Php 如何计算百分比

Php 如何计算百分比,php,math,formula,percentage,Php,Math,Formula,Percentage,我的数学真的很差,我不会计算以下的东西。。 我有两个栏目,分别是experience和level 如果经验超过200,则级别将更新为1 如果经验超过500,则级别将更新为2 我的意思是我从不重置体验 所以,我有一个加载条图像,我必须计算出以百分比表示的时间长度。我试过这样的东西 函数lvlbar($xp,$level){ } 当您处于级别1以下时,它工作正常,但一旦您达到级别2计算出错,百分比从50、60开始,以此类推。。 我想这是我的公式。帮我解决一下如果你的问题是在3级,看看你的数学条件:

我的数学真的很差,我不会计算以下的东西。。 我有两个栏目,分别是
experience
level

如果
经验
超过200,则
级别
将更新为
1

如果
经验
超过500,则
级别
将更新为
2

我的意思是我从不重置
体验

所以,我有一个加载条图像,我必须计算出以百分比表示的时间长度。我试过这样的东西

函数lvlbar($xp,$level){

}

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

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

elseif($level == 3){
    $percent = @round(($xp / 1400)*100);
}
如你所说,如果$xp=900,使用计算器将其除以1400,就像上面的计算一样


然后将结果乘以100,四舍五入的结果是64%,因此数学返回正确,这只是一个错误的等式

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

这意味着,你的公式是:

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

同样,例如:


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

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

function goUpLevel(){
  $level++;
  $experienceMax = $level * $experienceLevelMultiplier;
}
然后你发布的功能会简单得多,比如:

function lvlbar($xp, $level){
$percent = @round(($xp / $experienceMax)*100);
}
如果您无法计算$ExperienceLevel乘数的乘数,那么可能需要为每个级别设置一个值数组,即

$experienceLevelMultiplierArray = array (
1 => 10
2 => 15.5
);
这看起来更好,规模更好,更易于管理和理解!如果你能描述一下这个问题的背景,我肯定能进一步帮助你


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

如果你想让百分比条回到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;
}

这就是我要做的。正如前面的海报所提到的,升级时你必须调整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%

100%时加载条的宽度是多少?图像正常。但问题是,如果我在3级,并且我有
900经验
百分比必须是0%,但公式给了我64%。我不明白。在问题旁边,你的问题没有包含任何演示该问题的工作示例(这是必须的),你有格式问题,并且你使用了
@
错误抑制运算符,这不应该用PHP示例代码来完成。请让自己熟悉格式化工具,并编辑您的问题以改进它。此外,与您对问题的具体需求相比,问题标题过于宽泛。你不是问在数学中通常是如何做到的(计算百分比),而是问在代码转储中获得调试帮助。谢谢!这解决了问题:)
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%