开关盒失败

时间:2014-06-05 02:58:30

标签: php

我有这样的功能:

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'。

这怎么可能?

2 个答案:

答案 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!

Please see this article for more info.

答案 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-";
} ...