如何使用sprintf在Perl中填充变量长度为零?

问题描述:

我想用Perl的sprintf到ZEROFILL的变量。如何使用sprintf在Perl中填充变量长度为零?

sprintf("%08d", $var); 

但我想动态确定有多少数字zerofill。

如何与一个叫$zerofill变量替换“8” sprintf("%08d", $var)

的第一个参数sprintf只是一个字符串:

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

通知括号从字符串的其余部分分开设置的变量名称。

我们有这个特殊的问题,因为稍微聪明演习Learning Perl提醒人们,字符串仅仅是字符串。 :)

然而,随着mobrule points out in his answer,sprintf的有许多功能可以给你这种灵活性。这种看似简单的功能的文档相当长,并有很多好东西。

sprintfprintf支持*符号(这至少从5.8工作):


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

000

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

$ 456.78 

我需要做的事情略有不同:零垫浮点价值并获得确切的长度。

在我来说,我到底需要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);