简体   繁体   English

PHP的浮动比较不起作用

[英]php float comparison not working

I want to change the students marks to GP so I have code like this 我想将学生成绩更改为GP,所以我有这样的代码

$mark=80;    
if($mark>=84.50 && $mark<=100){$GP = 4;}
if($mark>=79.50 && $mark<=84.49){$GP = 3.67;}
if($mark>=74.50 && $mark<=79.49){$GP = 3.33;}
if($mark>=69.50 && $mark<=74.49){$GP = 3;}
if($mark>=64.50 && $mark<=69.49){$GP = 2.50;}
if($mark>=59.50 && $mark<=64.49){$GP = 2;}
if($mark>=54.50 && $mark<=59.49){$GP = 1.50;}
if($mark>=49.50 && $mark<=54.49){$GP = 1;}
else { $GP = 0; }
echo $GP;

Expected output here is 3.67 but here I am getting 0. Can anyone explain why I am getting 0? 预期的输出为3.67,但此处的值为0。有人可以解释为什么我的值为0吗?

Each if is evaluated independently. 每个if均独立评估。 Regardless of what happens with the first couple of if s, you reach the last one, and since $mark isn't between 49.50 and 54.49 , the code enters the else block, and sets $GP to 0 . 不管前几对if s发生什么情况,您都会到达最后一个,并且由于$mark不在49.5054.49之间,因此代码进入else块,并将$GP设置为0 If you replace all the if s except the first one with else if s you'll get the intended logic: 如果将除第一个以外的所有if替换为else if获得预期的逻辑:

$mark=80;    
if($mark>=84.50 && $mark<=100){$GP = 4;}
else if($mark>=79.50 && $mark<=84.49){$GP = 3.67;}
else if($mark>=74.50 && $mark<=79.49){$GP = 3.33;}
else if($mark>=69.50 && $mark<=74.49){$GP = 3;}
else if($mark>=64.50 && $mark<=69.49){$GP = 2.50;}
else if($mark>=59.50 && $mark<=64.49){$GP = 2;}
else if($mark>=54.50 && $mark<=59.49){$GP = 1.50;}
else if($mark>=49.50 && $mark<=54.49){$GP = 1;}
else { $GP = 0; }
echo $GP;
<?php
$mark=80;    
if($mark>=84.50 && $mark<=100){$GP = 4;}
elseif(abs($mark>=79.50 && $mark<=84.49)){$GP = 3.67;}
elseif($mark>=74.50 && $mark<=79.49){$GP = 3.33;}
elseif($mark>=69.50 && $mark<=74.49){$GP = 3;}
elseif($mark>=64.50 && $mark<=69.49){$GP = 2.50;}
elseif($mark>=59.50 && $mark<=64.49){$GP = 2;}
elseif($mark>=54.50 && $mark<=59.49){$GP = 1.50;}
elseif($mark>=49.50 && $mark<=54.49){$GP = 1;}
else { $GP = 0; }
echo $GP;
?>

Your comparision not in proper way check above code. 您的比较未正确检查上述代码。

Your code fails because your else only applies to the last condition. 您的代码失败,因为else代码仅适用于最后一个条件。 That means all the previous if statements have come to nothing. 这意味着所有以前的if语句都变为零。

You should use elseif to make sure that the conditions are truly distinct: 您应该使用elseif来确保条件是真正不同的:

$mark=80;    
if($mark>=84.50 $GP = 4;
elseif($mark>=79.50) $GP = 3.67;
elseif($mark>=74.50) $GP = 3.33;
elseif($mark>=69.50) $GP = 3;
elseif($mark>=64.50) $GP = 2.50;
elseif($mark>=59.50) $GP = 2;
elseif($mark>=54.50) $GP = 1.50;
elseif($mark>=49.50) $GP = 1;
else $GP = 0;

echo $GP;

As you see, you can also dispense with the && additional condition. 如您所见,您还可以免除&&附加条件。 Finally, you don't need braces ( {} ) around a simple statement. 最后,您不需要在简单的语句前后使用大括号( {} )。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM