php浮动比较不起作用

时间:2017-05-07 07:48:54

标签: php if-statement floating-point comparison

我想将学生商标改为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吗?

3 个答案:

答案 0 :(得分:2)

每个if都是独立评估的。无论前几个if发生了什么,您都会到达最后一个,并且由于$mark不在49.5054.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; ,您将获得预期的逻辑:

public class Person {
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    //etc..
    public string ApplicationUserId { get; set; }
}

public class MyContext :DbContext {
   public DbSet<Comment> Comments { get; set; }
   public DbSet<Person> Persons { get; set; }
   //... other DbSets
}

public class Comment{
   public int Id {get;set;}
   public string Message{get;set;}
   public DateTime Time{get;set;}
   public virtual Person Author {get;set;}
}

答案 1 :(得分:0)

exports.show500 = function(req, resp, err) {
    console.log('heree')
        resp.writeHeader(500, {"Content-Type": "application/json"});
        resp.write(JSON.stringify({data: "Error:" + err}))
};

exports.sendJSON = function(req, resp, data) {
    if (data){
        resp.writeHeader(200, {"Content-Type": "application/json"});
        resp.write(JSON.stringify(data));
    }
}

你的比较没有以正确的方式检查上面的代码。

答案 2 :(得分:0)

您的代码失败,因为您的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;

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