我想把学生的分数改为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;
这里的预期输出是3.67,但这里我得到的是0。有人能解释我为什么得到0吗?
发布于 2017-05-07 07:57:15
您的代码失败,因为您的else
只适用于最后一个条件。这意味着以前所有的if
语句都没有结果。
您应该使用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;
正如您所看到的,您还可以免除&&
附加条件。最后,您不需要围绕一个简单的语句使用大括号({}
)。
发布于 2017-05-07 07:53:20
每个if
都是独立评估的。不管前两个if
发生了什么,您都会到达最后一个,而且由于$mark
不在49.50
和54.49
之间,所以代码进入else
块,并将$GP
设置为0
。如果将除第一个之外的所有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;
发布于 2017-05-07 07:52:39
<?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;
?>
您的比较没有适当的方式检查以上代码。
https://stackoverflow.com/questions/43829068
复制相似问题