例如,我可以使用逗号作为分隔符进行格式化:
(format "%,d"(BigInteger. "fffff" 16))
;=> 1,048,575
是否可以使用空格:
1 048 575 ?
答案 0 :(得分:6)
您可以使用clojure.pprint
中的cl-format
,这是Common Lisp的一个实现,相当广泛且非常强大format
user=> (cl-format nil "The answer is ~,,' :D" 123456789)
"The answer is 123 456 789"
CL' cl-format
和Clojure的常规format
一样,有几个指令,这里有D
个数字。 :
修饰符告诉它在数字组之间打印逗号,但是,第二个逗号后面的'
指定使用空格作为要使用的逗号字符。
答案 1 :(得分:2)
我不确定这是最好的方法,但是,您可以安全地用空格替换,
。无论如何,在格式化数字之后,它只是一个字符串。
(clojure.string/replace (format "%,d" (BigInteger. "fffff" 16)) "," " ")
我尝试使用java.text.DecimalFormat
,并使用setGroupingSeparator
java.text.DecimalFormatSymbols
方法设置分组分隔符,但失败了。
答案 2 :(得分:1)
我认为这不可能使用java.util.Formatter(这是clojure.core/format
最终使用的)。但是,下面的代码将产生预期的结果:
(import 'java.text.DecimalFormatSymbols
'java.text.DecimalFormat
'java.text.FieldPosition)
(defn format-bigint [i]
(let [format (DecimalFormatSymbols.)
out (StringBuffer.)]
(.setGroupingSeparator format \space)
(.format (DecimalFormat. ",###" format) i out (FieldPosition. java.text.NumberFormat/INTEGER_FIELD))
(.toString out)))