2010-03-18 53 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);