我想使用 Perl 的sprintf来对变量进行零填充。
sprintf("%08d", $var);
但我想动态确定要填零的位数。
如何sprintf("%08d", $var)
用名为的变量替换“8” $zerofill
?
sprintf的第一个参数只是一个字符串:
my $zerofill = 9;
my $number = 1000;
my $filled = sprintf "%0${zerofill}d", $number;
请注意大括号将变量名称与字符串的其余部分分开。
我们有这个特殊的问题作为学习 Perl中的一个稍微聪明的练习,以提醒人们字符串只是字符串。:)
但是,正如mobrule 在他的回答中指出的那样, sprintf 有许多功能可以为您提供这种灵活性。这样一个看似简单的函数的文档很长,里面有很多好东西。
sprintf
并printf
支持*
符号(这至少从 5.8 开始有效):
printf "%0*d", 9, 12345;
000012345
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);