我想使用sprintf在给定数字的右侧填充零。
例如:如果数字是0715,那么我想在右边补零,创建一个新的六位数:
Input-->0715
Output-->071500发布于 2015-08-20 18:59:16
sprintf没有使用零而不是空格来格式化左对齐字符串的模式。
以下是perldoc列出的所有标志:
空格前缀带空格的非负数+前缀带加号的非负数-在字段0内左对齐使用零而不是空格进行右对齐#确保任何八进制的前导"0“,用"0X”或"0x“作为非零十六进制数的前缀,用"0b”或"0B“作为非零二进制的前缀
如果您坚持使用sprintf,您将不得不使用-在字段中进行左对齐,这将在右侧留下空格。然后,您需要将它们更改为零。您可以使用tr transliteration operator做到这一点。我使用的是带有/r修饰符的较短形式,它使tr///返回值,而不仅仅是更改左值$foo。
my $foo = '0715';
print sprintf('%-6s', $foo) =~ tr/ /0/r;输出:
071500发布于 2015-08-20 16:12:24
使用sprintf不能做到这一点,因为如果这样做了,那么您将更改所显示的数字的值-这不是格式化。如果你把你的数字当作一个数值,你也不能这样做。
您需要测试您的数字的长度作为字符串,并附加零:
my $num_str = "0715";
my $length = 6 - length($num_str);
print $num_str , "0" x $length;发布于 2015-08-20 16:25:15
您也可以使用substr来完成此操作。追加六个索引,并将0th中的字符串添加到6th 0。但显然,正如Sobrique所说,你不能把它当作数字来做。
my $num = '0715';
print substr $num.'0'x6,0,6;https://stackoverflow.com/questions/32112753
复制相似问题