如何计算百分比

问题描述:

我在数学上真的很差,我无法计算以下的东西。 我有两列,名为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等。 我想这是我的公式。帮我出局

+0

什么在100%负载条的宽度? – JohnnyFaldo

+0

图像没问题。但问题是如果我在3级,而我有'900经验',百分比必须是0%,但是公式给我64%。我不明白。 – k1tkat

+0

在问题的旁边,你的问题不包含任何演示问题的*工作*例子(这是一个***必须***),你有格式化问题,你使用'@'错误抑制运算符不应该在SO上使用PHP示例代码来完成。请让自己适应格式化工具,并编辑您的问题以改进它。 – hakre

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

这意味着,你的计算公式为:

百分比到下一级=从电流电平/体验体验前进到下一个水平所需

同样,例如:

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

+0

谢谢!这解决了问题:) – k1tkat

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

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

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

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

我不完全得到问题,所以不能提出一个确切的解决方案。但当然,这是凌乱的重复代码!我认为你所划分的数字在同一时间级别上增加会更好。所以不知道它到底是什么你这样做,是这样的:

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

然后你发布你的函数会方式更加简单,如:

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

如果你不能想出一个乘法器$ experienceLevelMultiplier,那么也许对每个级别值的阵列,即

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

这看起来更好,扩展能力更强,更易于管理和理解!如果你描述一些问题的背景,我肯定可以进一步帮助!

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

如果您希望百分比栏回落到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; 
} 

这几乎是我会做什么。正如之前的海报所说,升级时必须调整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%