如何在Clojure中使用空格作为分隔符格式化数字?

时间:2014-12-18 09:29:15

标签: clojure

例如,我可以使用逗号作为分隔符进行格式化:

(format "%,d"(BigInteger. "fffff" 16))
;=> 1,048,575

是否可以使用空格:

1 048 575 ?

3 个答案:

答案 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)))