Ina*_*thi 4 common-lisp string-formatting
format有零填充数字的指令.
cl-user> (format nil "~12,'0d" 27)
"000000000027"
Run Code Online (Sandbox Code Playgroud)
并且有一个类似的指令,用于在填充字符串时对齐字符串
cl-user> (format nil "~12@<~d~>" 27)
"27 "
Run Code Online (Sandbox Code Playgroud)
有办法做到这两点吗?那是:
cl-user> (format nil "~12,something,d" 27)
"270000000000"
Run Code Online (Sandbox Code Playgroud)
天真"~12,'0@<~d~>"似乎没有做我想要的.
cl-user> (format nil "~12,'0@<~d~>" 27)
"27 "
Run Code Online (Sandbox Code Playgroud)
你接近最后一个例子,但是你需要更多的逗号,因为tilde少于四个参数,pad char是第四个参数,但你将它作为第二个传递.把它作为第四个传递给它:
CL-USER> (format nil "~12,,,'0@<~d~>" 27)
"270000000000"
Run Code Online (Sandbox Code Playgroud)
顺便说一下,在评论 中指出,右边填充会改变看起来不是有用操作的值.我会说它可以是一个有用的操作.它可能取决于这些值是整数还是字符串,其值恰好是数字字符.我见过维护系统,其中升级改变了字段宽度,迁移旧记录的过程是右边的填充0.正确的填充正是因为它改变了价值.000027(六个字符)可以写成27,这不是六个字符宽,000027也可能被意外读取(可能是机器,当程序员不小心时)作为八进制.另一方面,270000必须是六位数,并且不是八进制数,因为它不是以0开头
用途~A:
(format nil "~33,,,'0A" 27)
==> "270000000000000000000000000000000"
Run Code Online (Sandbox Code Playgroud)