2017-03-25 65 views
-1

使用case開關,我將如何測試以查看十進制值是否在一個範圍內?php switch case語句處理帶小數/分數的範圍

此代碼似乎只檢查整個數字。

這是我的代碼,試圖檢查小數/分數。

$my_num = 0.38; 

switch(true) { 
    case in_array($my_num, range(0, .20, 0.01)): 
     $my_num_result = "It looks like your number is between 0 - 0.20!"; 
    break; 
    case in_array($my_num, range(.21, .40, 0.01)): 
     $my_num_result = "I am between .21 - 0.40!"; 
    break; 
} 

//Result: I am between .21 - 0.40! 
echo $my_num_result; 

這個問題是this question and answer的延續,但沒有解決小數。

+2

'in_array() 「由於浮點不精確,真的不是檢查浮點數的好方法;也不使用switch語句特別適合這種類型的檢查 –

+0

我很樂意提供更好的解決方案。 – Damien

回答

0

我提出一個不同的方法,您可以使用(如果你沒有太多的時間間隔進行測試),可以說你需要知道哪個區間包含一個數字:

$intervals = [[0,.20],[.21,.40],[.41,.60]/*...*/]; 
$num = .32; 

$message = 'I am between %s - %s!'; 

foreach ($intervals as $inter) { 
    if ($inter[0] <= $num && $num <= $inter[1]) { 
     vprintf($message, $inter); 
     break; 
    } 
} 
+0

如果定義的變量實際上是一個全新的句子,我將如何使用此代碼? '如果在1-20之間$ my_num_result =「某句話」'如果在21-30 $之間'''my_num_result =「一些全新的句子」' – Damien

+0

然後你可以使用'$ intervals'數組的鍵來識別句子 –

+0

@ Damien:或者你可以把它放在數組中:'$ intervals = [[0,.20,'message'=>'sent1'],[。21,.40,'message'=>'sent2']。 ..]' –