首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用sprintf在Perl中向右侧添加填充零?

问如何使用sprintf在Perl中向右侧添加填充零?
EN

Stack Overflow用户
提问于 2015-08-20 16:03:44
回答 5查看 3.5K关注 0票数 5

我想使用sprintf在给定数字的右侧填充零。

例如:如果数字是0715,那么我想在右边补零,创建一个新的六位数:

代码语言:javascript
复制
Input-->0715
Output-->071500
EN

回答 5

Stack Overflow用户

发布于 2015-08-20 18:59:16

sprintf没有使用零而不是空格来格式化左对齐字符串的模式。

以下是perldoc列出的所有标志:

空格前缀带空格的非负数+前缀带加号的非负数-在字段0内左对齐使用零而不是空格进行右对齐#确保任何八进制的前导"0“,用"0X”或"0x“作为非零十六进制数的前缀,用"0b”或"0B“作为非零二进制的前缀

如果您坚持使用sprintf,您将不得不使用-在字段中进行左对齐,这将在右侧留下空格。然后,您需要将它们更改为零。您可以使用tr transliteration operator做到这一点。我使用的是带有/r修饰符的较短形式,它使tr///返回值,而不仅仅是更改左值$foo。

代码语言:javascript
复制
my $foo = '0715';
print sprintf('%-6s', $foo) =~ tr/ /0/r;

输出:

代码语言:javascript
复制
071500
票数 3
EN

Stack Overflow用户

发布于 2015-08-20 16:12:24

使用sprintf不能做到这一点,因为如果这样做了,那么您将更改所显示的数字的值-这不是格式化。如果你把你的数字当作一个数值,你也不能这样做。

您需要测试您的数字的长度作为字符串,并附加零:

代码语言:javascript
复制
my $num_str = "0715";
my $length  = 6 - length($num_str);
print $num_str , "0" x $length;
票数 2
EN

Stack Overflow用户

发布于 2015-08-20 16:25:15

您也可以使用substr来完成此操作。追加六个索引,并将0th中的字符串添加到6th 0。但显然,正如Sobrique所说,你不能把它当作数字来做。

代码语言:javascript
复制
my $num = '0715';
print substr $num.'0'x6,0,6;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32112753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档