我有这样的功能:
public static function GetNilaiHuruf($nilai)
{
if($nilai > 4)
{
$nilai = (float) ((float)($nilai) / (float)(100.0) * (float)4.0);
}
switch($nilai)
{
case ($nilai > 3.66 && $nilai <= 4) :
return "A";
break;
case ($nilai > 3.33 && $nilai <= 3.66) :
return "A-";
break;
case ($nilai > 3.00 && $nilai <= 3.33) :
return 'B+';
break;
case ($nilai > 2.66 && $nilai <= 3.00) :
return 'B';
break;
case ($nilai > 2.33 && $nilai <= 2.66) :
return 'B-';
break;
case ($nilai > 2.00 && $nilai <= 2.33) :
return 'C+';
break;
case ($nilai > 1.66 && $nilai <= 2.00) :
return 'C';
break;
case ($nilai > 1.33 && $nilai <= 1.66) :
return 'C-';
break;
case ($nilai > 1.00 && $nilai <= 1.33) :
return 'D+';
break;
case ($nilai >= 0.00 && $nilai <= 1.00) :
return 'D';
break;
}
}
当我用$ nilai调用该函数为0时,该函数返回'A'; 当我用$ nilai调用该函数为0.007或'x'时,该函数返回'D'。
这怎么可能?
答案 0 :(得分:1)
这不是switch语句的工作原理,它们不应该用于进行数字比较。
但是,可以通过使用boolean true作为switch参数来实现您想要的效果:
$yourvar = -20;
switch(true) {
case ($yourvar > 0 && $yourvar < 5) :
echo 'Hello world!';
break;
case ($yourvar < 0) :
echo 'Hello hell!';
break;
}
// Hello hell!
答案 1 :(得分:0)
此处无需尝试使用switch
。使用if
/ else if
/ else
:
if ($nilai > 3.66 && $nilai <= 4) {
return "A";
} else if ($nilai > 3.33 && $nilai <= 3.66) {
return "A-";
} ...