我一直在试验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)
这可能带小数值吗?
答案 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
之前。