2013-11-25 65 views
1

我試圖找出一種方法來產生以下的輸出:顯示2-4之間的小數位(PHP)

4.0000 = 4.00 

4.5000 = 4.50 

4.454= 4.454 

4.54545454 = 4.5455 

4.450 = 4.45 

基本上我要確保始終有至少2位小數,如果有額外的零,修剪到2個小數位。如果有一輪超過小數點後4位,並保持在4

我可以使用:

number_format($number, 4, '.', ''); 

然後RTRIM去除零,這會讓我在許多情況下小於2位小數。

+0

使用數字格式,並檢查兩次' if(substr($ string,-1)=='0'){remove the zero}' –

回答

4
function format_number($number) { 
    $str = number_format($number, 4, '.', ''); 
    return preg_replace('/(?<=\d{2})0+$/', '', $str); 
} 

format_number(4.0)  // "4.00" 
format_number(4.5)  // "4.50" 
format_number(4.454)  // "4.454" 
format_number(4.54545454) // "4.5455" 
format_number(4.450)  // "4.45" 
+0

你應該想出一個比'format_number'更好的名字。 – mcrumley

1

這裏有一種方法,你可以做到這一點:

function myround($input) { 
    $floor = floor($input); 
    $remain = rtrim($input- $floor); 
    if(strlen($remain) > 4) { 
     return number_format($floor + $remain,4); 
    } else { 
     return number_format($floor + $remain,2); 
    } 
} 

print_r(myround(4.312423)); //outputs 4.3124 
print_r(myround(4.3)); //outputs 4.30 
print_r(myround(4)); //outputs 4.00 
0

我會做這樣的事情,如果你正在尋找,以避免正則表達式:

$arr = array(); 
$arr = 4.0000; 
$arr = 4.5000; 
$arr = 4.454; 
$arr = 4.54545454; 
$arr = 4.450; 

foreach($arr as $k=>$v) 
{ 
    $arr[$k] = number_format($v, 4, '.', ''); 

    $vals = exlode('.', (string)$arr[$k]); 

    if(substr($vals[1], -1, 1) === '0') 
    { 
     $arr[$k] = (float)$vals[0].'.'.substr($vals[1], -1, 1); 

     $vals = exlode('.', (string)$arr[$k]); 

     if(substr($vals[1], -1, 1) === '0') 
     { 
      $arr[$k] = (float)$vals[0].'.'.substr($vals[1], -1, 1); 
     } 
    } 
} 
相關問題