如何使用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的有许多功能可以给你这种灵活性。这种看似简单的功能的文档相当长,并有很多好东西。
答
sprintf
和printf
支持*
符号(这至少从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);