2013-12-18 56 views

回答

5

我發現sprintfnumber_format兩個輪數,所以我用這樣的:

$number = 2.4232; 
$decimals = 3; 
$expo = pow(10,$decimals); 
$number = intval($number*$expo)/$expo; // = 2423/100 
+0

這完全符合JavaScript的toFixed。 – earl3s

0

在PHP中,您可以使用一個名爲round的函數。

16

你有沒有嘗試過這樣的:

round(2.4232, 2); 

這將使你的2.42答案。

更多信息可以在這裏找到:http://php.net/manual/en/function.round.php

+2

如果將它用於round(2.4255,2),它將返回2.43 –

+0

@DănuţMihaiFlorian它取決於您設置爲'mode'的內容http://php.net/manual/en/function.round.php# refsect1-function.round-parameters – yckart

+1

在64.000000的情況下,它返回64.我想得到64.00 –

2

直接等同爲sprintf('%.03F', $a)。這會將有問題的值格式化爲3位十進制數字。如果需要,它也會輪迴。

+0

已測試。不輪。 – MonOve

+0

@MonOve:[Works for me](http://ideone.com/PZMjiY)。 – Jon

11

PHP中的完全等效的命令是功能number_format

number_format($a, 3, ".", ""); // 2.423 
  • 它舍入數到小數點後第三位
  • 如果需要總是有三位十進制數字,它將填充'0'字符

這是一個實用的功能:

function toFixed($number, $decimals) { 
    return number_format($number, $decimals, ".", ""); 
} 

toFixed($a, 3); // 2.423 
+0

這不提供問題的答案。要批評或要求作者澄清,在他們的帖子下留下評論 - 你總是可以評論你自己的帖子,一旦你有足夠的[聲譽](http://stackoverflow.com/help/whats-reputation),你會能夠[評論任何帖子](http://stackoverflow.com/help/privileges/comment)。 – MattDMo

+0

我編輯了這個以提供問題的答案。 – cassiodoroVicinetti

+3

可能是最準確的答案 –

1

以下是譯文:

function toFixed($number, $dec_length){ 
    $pos=strpos($number.'', "."); 
    if($pos>0){ 
     $int_str=substr($number,0,$pos); 
     $dec_str=substr($number, $pos+1); 
     if(strlen($dec_str)>$dec_length){ 
      return $int_str.($dec_length>0?'.':'').substr($dec_str, 0,$dec_length); 
     }else{ 
      return $number; 
     } 
    }else{ 
     return $number; 
    } 
} 


//toFixed(1234.678, 0) = 1234 
//toFixed(1234.678, 1) = 1234.6 
//toFixed(1234.678, 2) = 1234.67 
//toFixed(1234.678, 4) = 1234.678 
相關問題