首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >php浮动比较不起作用

php浮动比较不起作用
EN

Stack Overflow用户
提问于 2017-05-07 07:48:54
回答 3查看 48关注 0票数 0

我想把学生的分数改为GP,所以我有这样的代码

代码语言:javascript
运行
复制
$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吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-07 07:57:15

您的代码失败,因为您的else只适用于最后一个条件。这意味着以前所有的if语句都没有结果。

您应该使用elseif来确保条件是真正不同的:

代码语言:javascript
运行
复制
$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;

正如您所看到的,您还可以免除&&附加条件。最后,您不需要围绕一个简单的语句使用大括号({})。

票数 0
EN

Stack Overflow用户

发布于 2017-05-07 07:53:20

每个if都是独立评估的。不管前两个if发生了什么,您都会到达最后一个,而且由于$mark不在49.5054.49之间,所以代码进入else块,并将$GP设置为0。如果将除第一个之外的所有if替换为else if,您将得到预期的逻辑:

代码语言:javascript
运行
复制
$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;
票数 2
EN

Stack Overflow用户

发布于 2017-05-07 07:52:39

代码语言:javascript
运行
复制
<?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;
?>

您的比较没有适当的方式检查以上代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43829068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档