如何计算百分比
我在数学上真的很差,我无法计算以下的东西。 我有两列,名为experience
和level
。如何计算百分比
如果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%。
这意味着,你的计算公式为:
百分比到下一级=从电流电平/体验体验前进到下一个水平所需
同样,例如:
百分比为2级时的经验是350 =(350 - 200)/(500 - 200)= 50%
谢谢!这解决了问题:) – 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%
什么在100%负载条的宽度? – JohnnyFaldo
图像没问题。但问题是如果我在3级,而我有'900经验',百分比必须是0%,但是公式给我64%。我不明白。 – k1tkat
在问题的旁边,你的问题不包含任何演示问题的*工作*例子(这是一个***必须***),你有格式化问题,你使用'@'错误抑制运算符不应该在SO上使用PHP示例代码来完成。请让自己适应格式化工具,并编辑您的问题以改进它。 – hakre