格式化固定的十进制标量

时间:2013-08-17 20:04:43

标签: perl printf

我一直在试验sprintf试图修正小数点右边和左边的位数。

以下作品,但不能很好地处理0.00。如您所见,0.00与所有其他非零小数值不正确对齐。

sprintf("%.2f ", $sw_chgs)

535.14  642.90  20.31  1198.35
442.74  531.90  20.31  994.95
0.00  0.00  0.00  0.00

如果我在sprintf中添加字段宽度或类似%6f的指示符," 2f"在小数位后打印。

sprintf("%6f.2f ", $ws_chgs

244.100000.2f

我想做以下的事情,限制整个数字的字段宽度

sprintf("%6d ", $prev_rd)

这可能带小数值吗?

2 个答案:

答案 0 :(得分:4)

请注意,6是格式化字符串中所有字符的编号,

 sprintf("%06.2f ", 1);

输出

001.00

或没有前导零,

sprintf("%6.2f ", 1);

输出

  1.00

答案 1 :(得分:4)

您误解了printf格式的格式。有点像这样:

"%" <padding>? <minimum width>? "." <precision>? <type>

E.g。 %7.2f。那么这段代码

say join " : ", map sprintf('%7.2f', $_), @$_ for
  [ 535.14, 642.90, 20.31, 1198.35 ],
  [ 442.74, 531.90, 20.31,  994.95 ],
  [   0.00,   0.00,  0.00,    0.00 ],
;

打印

 535.14 :  642.90 :   20.31 : 1198.35
 442.74 :  531.90 :   20.31 :  994.95
   0.00 :    0.00 :    0.00 :    0.00

请注意,最小宽度包括小数点分隔符。

width和precision参数不包括类似f的类型。因此,您的%6f.2f被解析为模式%6f,它位于非特殊字符串.2f之前。