2012-07-17 69 views
0

我完全不熟悉PHP。我試圖做一個簡單的計算腳本。我面臨的問題是,當有人輸入一個像「98,7」這樣的數字時,數字四捨五入爲「99」,腳本輸出「99」而不是「100」。所以我的問題是如何處理這個問題。格式化輸入字段並打印一個整數

我的腳本:

   if($omtrek >=53 && $omtrek <=57) $omtrek=55; 
       elseif($omtrek >=58 && $omtrek <=62) $omtrek=60; 
       elseif($omtrek >=63 && $omtrek <=67) $omtrek=65; 
       elseif($omtrek >=68 && $omtrek <=72) $omtrek=70; 
       elseif($omtrek >=73 && $omtrek <=77) $omtrek=75; 
       elseif($omtrek >=78 && $omtrek <=82) $omtrek=80; 
       elseif($omtrek >=83 && $omtrek <=87) $omtrek=85; 
       elseif($omtrek >=88 && $omtrek <=92) $omtrek=90; 
       elseif($omtrek >=93 && $omtrek <=97) $omtrek=95; 
       elseif($omtrek >=98 && $omtrek <=102) $omtrek=100; 
       elseif($omtrek >=103 && $omtrek <=107) $omtrek=105; 
       elseif($omtrek >=108 && $omtrek <=112) $omtrek=110; 
       elseif($omtrek >=113 && $omtrek <=117) $omtrek=115; 
       elseif($omtrek >=118 && $omtrek <=122) $omtrek=120; 
       elseif($omtrek >=123 && $omtrek <=127) $omtrek=125; 
       elseif($omtrek >=128 && $omtrek <=132) $omtrek=130; 
       elseif($omtrek >=133 && $omtrek <=137) $omtrek=135; 
       elseif($omtrek >=138 && $omtrek <=142) $omtrek=140; 

       if ($omtrek < 53){ 
        print 'Helaas'; 
       } 
       elseif ($omtrek > 142){ 
        print 'XXL'; 
       } 
       elseif ($omtrek = round($omtrek)){ 
        print("maat: " . $omtrek . "<br/>"); 
       } 
+0

你想整理和舍入? – Chimera 2012-07-18 02:56:39

+0

請小心使用逗號作爲小數。字符串「97,7」(用逗號)比100更接近95. – ghoti 2012-07-18 16:15:54

回答

4

您正試圖四捨五入到最接近的「5」而不是「1」。因此,我們可以用它來大大簡化你在做什麼:

$omtrek = 5 * round($omtrek/5); 

,取代你的巨大的if語句樹。所以,你的整個代碼歸結爲:

if ($omtrek < 53){ 
    print 'Helaas'; 
} elseif ($omtrek > 142){ 
    print 'XXL'; 
} else { 
    print "maat: " . (5 * round($omtrek/5)) . "<br/>"; 
} 

此外,爲您的原點,應該由你如果結構處理,因爲98.7下降的條件之一內。

+0

這是一個糟糕的屁股解決方案!從來沒有想過這樣,這樣!感謝您的幫助和評論。 – Meules 2012-07-18 19:47:20

1

我認爲你正在尋找的功能是小區

<?php 
$omtrek = 98.7; 

$omtrek=ceil($omtrek); 

    if($omtrek >=53 && $omtrek <=57) $omtrek=55; 
    elseif($omtrek >=58 && $omtrek <=62) $omtrek=60; 
    .... 

然後你就可以刪除如下輪函數...

if ($omtrek < 53){ 
    print 'Helaas'; 
} 
elseif ($omtrek > 142){ 
    print 'XXL'; 
} 
else{ 
    print("maat: " . $omtrek . "<br/>"); 

}

2

而不是有一長串if()陳述,爲什麼不只是應用一點數學?

$ cat om.php 
#!/usr/local/bin/php 
<?php 

$omtrek = array(52, 59, 61, 62, 63, 96.7, 98.7, 150); 

foreach ($omtrek as $value) { 
    if ($value < 53){ 
    $output='Helaas'; 
    } elseif ($value > 142){ 
    $output='XXL'; 
    } else { 
    $output = round($value/5)*5; 
    } 
    printf("%6s => %s\n", $value, $output); 
} 

$ ./om.php 
    52 => Helaas 
    59 => 60 
    61 => 60 
    62 => 60 
    63 => 65 
    96.7 => 95 
    98.7 => 100 
    150 => XXL 
$ 
1

我認爲由ghoti和ircmaxel提供的答案比這更好。然而,因爲你是PHP的新手......你可能不知道如果一個if()評估爲真,其他人在「其他」鏈中的其他人甚至不會被考慮。因此,這將工作:

  if ($omtrek < 53) $omtrek="Helaas"; 
      elseif ($omtrek <= 57) $omtrek=55; 
      elseif ($omtrek <= 62) $omtrek=60; 
      elseif ($omtrek <= 67) $omtrek=65; 
      elseif ($omtrek <= 72) $omtrek=70; 
      elseif ($omtrek <= 77) $omtrek=75; 
      elseif ($omtrek <= 82) $omtrek=80; 
      elseif ($omtrek <= 87) $omtrek=85; 
      elseif ($omtrek <= 92) $omtrek=90; 
      elseif ($omtrek <= 97) $omtrek=95; 
      elseif ($omtrek <= 102) $omtrek=100; 
      elseif ($omtrek <= 107) $omtrek=105; 
      elseif ($omtrek <= 112) $omtrek=110; 
      elseif ($omtrek <= 117) $omtrek=115; 
      elseif ($omtrek <= 122) $omtrek=120; 
      elseif ($omtrek <= 127) $omtrek=125; 
      elseif ($omtrek <= 132) $omtrek=130; 
      elseif ($omtrek <= 137) $omtrek=135; 
      elseif ($omtrek <= 142) $omtrek=140; 
      else $omtrek="XXL"; 

      print "maat: " . $omtrek . "<br/>";