1

我一直在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)

十进制值可以吗?

4

2 回答 2

4

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

 sprintf("%06.2f ", 1);

输出

001.00

或没有前导零,

sprintf("%6.2f ", 1);

输出

  1.00
于 2013-08-17T20:17:56.597 回答
4

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

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

例如%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

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

宽度和精度参数不包括f. 因此,您将%6f.2f被解析为模式%6f,它位于非特殊字符串之前.2f

于 2013-08-17T20:23:03.793 回答