我想使用sprintf
将零填充到给定数字的右侧。
示例:如果数字是0715
,那么我想在右边填充零,创建一个新的六位数字:
Input-->0715
Output-->071500
答案 0 :(得分:2)
您无法使用sprintf
执行此操作,因为如果您这样做,那么您将更改所显示数字的值 - 这不是格式化。如果您将数字视为数值,也不能这样做。
您需要将数字的长度作为字符串进行测试,并附加零:
my $num_str = "0715";
my $length = 6 - length($num_str);
print $num_str , "0" x $length;
答案 1 :(得分:1)
您也可以使用substr
执行此操作。附加六个0
并获取从0th
到6th
索引的字符串。但很明显,Sobrique说你无法将其视为数字。
my $num = '0715';
print substr $num.'0'x6,0,6;
答案 2 :(得分:1)
my $num='0715';
$num.='0'x( 6 - length $num);
print "$num";
答案 3 :(得分:1)
space prefix non-negative number with a space
+ prefix non-negative number with a plus sign
- left-justify within the field
0 use zeros, not spaces, to right-justify
# ensure the leading "0" for any octal,
prefix non-zero hexadecimal with "0x" or "0X",
prefix non-zero binary with "0b" or "0B"
没有模式来格式化用零而不是空格左对齐的字符串。
这些是How to set date of datepicker that displays Month and Year only列出的所有标志:
sprintf
如果您坚持使用-
,则必须在字段中使用/r
到左对齐,这会在右侧显示空格。然后你需要将它们更改为零。您可以使用perldoc执行此操作。我使用带有tr///
修饰符的较短格式,使$foo
返回值,而不是仅更改左值my $foo = '0715';
print sprintf('%-6s', $foo) =~ tr/ /0/r;
。
071500
<强>输出:强>
db.collection.mapReduce(
function() {
var obj = { "daily": this.daily, "hourly": {} };
for ( var x=0; x <= 23; x++ ) {
obj.hourly[x] = 0;
}
var hourly = this.hourly;
Object.keys(hourly).forEach(function(hour) {
obj.hourly[hour] += hourly[hour];
});
emit(null, obj);
},
function(key,values) {
var obj = { "daily": 0, "hourly": {} };
for ( var x=0; x <= 23; x++ ) {
obj.hourly[x] = 0;
}
values.forEach(function(value) {
obj.daily += value.daily;
Object.keys(value.hourly).forEach(function(hour) {
obj.hourly[hour] += value.hourly[hour];
});
});
return obj;
},
{ "out": { "inline": 1 } }
)
答案 4 :(得分:0)
众所周知,您可以使用print(sprintf("%010s", "hello!"));
轻松地向左执行此操作,以获取0000hello!
。为什么不进一步使用该过程呢?这是在perl中使用sprintf()
进行此操作的另一种方法-只需使用适当的scalar()
和reverse()
调用,就可以了:
设置数字和我们的打击垫长度:
my $var = "0715";
my $padlength = 6;
反转字符串,将其sprintf格式化,然后反转:
my $formatted = reverse(sprintf("%0" . $padlength . "s", scalar(reverse($var))));
print($formatted);
结果令人满意:
071500