2010-06-03 42 views
11

我想弄清楚如何使用sprintf打印至少兩位小數,並且沒有前導零。例如printf,sprintf打印至少兩位小數

輸入:

23 
23.0 
23.5 
23.55 
23.555 
23.0000 

輸出:

23.00 
23.00 
23.50 
23.55 
23.555 
23.00 

任何格式的幫助,將不勝感激

回答

12

沒有這樣的內置格式說明。您可以檢查要打印的數字是否有兩個或更少的小數(四捨五入到小數點後進行比較),如果是,則使用%.02f。如果數字有更多小數,請使用%g說明符。下面是Ruby的一個例子:

def print_two_dec(number) 
    rounded = (number*100).to_i/100.0 
    if number == rounded 
    printf "%.02f\n", number 
    else 
    printf "%g\n", number 
    end 
end 

[ 23, 23.0, 23.5, 23.55, 23.555 ].each do |number| 
    print_two_dec(number) 
end 

輸出:

23.00 
23.00 
23.50 
23.55 
23.555 
0

是否 「23.555」 .toFixed(2)不能做什麼,我認爲它呢? (JavaScript)的

+0

該主題與格式有關。不四捨五入。此外,「toFixed」因其是否四捨五入而聲名狼借。 – Kafoso 2016-02-18 07:52:50

+1

格式化和舍入之間的差異似乎是語義問題是關於將值格式化到一定的小數位數。如果你有一些關於'toFixed'不一致的細節可能是一個有用的補充。 – SimplGy 2016-02-18 17:46:05

2

在PHP中,你可以使用

<?php 
$number = 0.56; 
echo sprintf("%0.2f",$number); 
+1

不是。他說*至少* 2位小數。剛剛測試過,它會在PHP中截斷。 – mpen 2014-08-16 23:27:15

0

在PHP中,你可以使用number_format功能用於此目的,太,這也可以讓你改變分隔符。

0

在php中,這是我所做的(受此帖的啓發)。也許不是最優雅的,但...我作爲字符串打印數字的功能。我希望能夠具有靈活性,所以我有幾個參數。

PHP:

function print_num($num,$numdec,$atleast = false,$max_dec = -1) 
{ 

    $ret_norm = false; 

    if (!$atleast) 
    $ret_norm = true; 
    else //atleast = true 
    { 
    //Want at least $numdec decimals 

    //Do we have two or fewer and want to return two or fewer? 
    if ($num == ((int)($num*100)/100) & $numdec <= 2) 
     $ret_norm = true; 
    else 
    { 
     //See if we have enough dec. already 
     $just_dec = substr((string)$num,strpos((string)$num,".") + 1); 
     if ($numdec >= strlen($just_dec)) 
     $ret_norm = true; 
     else 
     { 
     //More decimals than at least value - make sure we don't go over max if set 
     if ($max_dec >= 0 && strlen($just_dec) > $max_dec) 
     { 
      //Confine to max_dec length 
      $ret_norm = true; 
      $numdec = $max_dec;     //Set for sprintf below 
      $num = number_format($num,$max_dec); //Round the value so doesn't just chop off 

     } 
     else if ($max_dec >= 0) 
      $ret_norm = false; 
     } //else 
    } //else 
    } //else atlest 

    if ($ret_norm) 
    return sprintf("%0.".$numdec."f",$num); 
    else 
     return sprintf("%s",$num); //print as is 

} //print_num 

,並調用函數(至少有兩位小數,但最大4:

print_num($mynum,2,true,4); 

如果數字是34.1,你得到34.10

如果你得到的數字是34.12345 34.1235