有一个format
指令来填充数字。
cl-user> (format nil "~12,'0d" 27)
"000000000027"
并且有一个类似的指令,用于在填充字符串时对齐字符串
cl-user> (format nil "~12@<~d~>" 27)
"27 "
有两种方法可以做到吗?那就是:
cl-user> (format nil "~12,something,d" 27)
"270000000000"
幼稚的"~12,'0@<~d~>"
似乎没有按照我的意愿行事。
cl-user> (format nil "~12,'0@<~d~>" 27)
"27 "
答案 0 :(得分:6)
你接近最后一个例子,但是你需要更多的逗号,因为tilde less-than有四个参数,而pad char是第四个参数,但你将它作为传递给它第二。把它作为第四个传递给它:
CL-USER> (format nil "~12,,,'0@<~d~>" 27)
"270000000000"
顺便说一下,正确的填充是pointed out in the comments改变了看起来不是一个有用的操作的值。我说它可以是一个有用的操作。它可能取决于这些值是整数还是字符串,其值恰好是数字字符。我见过维护系统升级改变了字段宽度,迁移旧记录的过程是右边的0和0。正确的填充正是因为它改变了价值。 000027(六个字符)可以写成27,它不是六个字符宽,000027也可能被意外读取(可能是机器,当程序员不小心)作为八进制。另一方面,270000必须是六位数,并且不会是八进制的,因为它不是以0开头
答案 1 :(得分:5)
使用~A
:
(format nil "~33,,,'0A" 27)
==> "270000000000000000000000000000000"