2010-03-18 52 views

回答

14

的第一個參數sprintf只是一個字符串:

my $zerofill = 9; 
my $number = 1000; 
my $filled = sprintf "%0${zerofill}d", $number; 

通知括號從字符串的其餘部分分開設置的變量名稱。

我們有這個特殊的問題,因爲稍微聰明演習Learning Perl提醒人們,字符串僅僅是字符串。 :)

然而,隨着mobrule points out in his answer,sprintf的有許多功能可以給你這種靈活性。這種看似簡單的功能的文檔相當長,並有很多好東西。

13

sprintfprintf支持*符號(這至少從5.8工作):


printf "%0*d", 9, 12345; 

000

printf '$%*.*f', 8, 2, 456.78; 

$ 456.78 
2

我需要做的事情略有不同:零墊浮點價值並獲得確切的長度。

在我來說,我到底需要12字節,其中包括小數點。這比你上面的有點棘手。這裏是任何人需要這樣的情況:

說$ inputVal是從某個地方傳入的字符串,其值爲1001.1。請注意,它應不超過12個字符這個可靠地工作

# This will give us extra zeros, but the string may be too long 
my $floatVal = sprintf('%*.*f', 12, 12, $inputValue); 

# This will remove any extra zeros 
$result = substr($floatVal, 0, 12);