如何在Clojure中以惯用方式打印货币?

时间:2015-02-14 11:36:01

标签: clojure currency number-formatting

我使用以下内容:

(defn dollars [input] (str "$" (format "%.2f" input)))

(不做逗号)

但我认为必须有一个使用pprint/cl-format的方法。

我的问题是:如何在Clojure中以惯用方式打印货币?

2 个答案:

答案 0 :(得分:4)

如果你有更多的工作资金,而不仅仅是格式化它,你可以考虑使用https://github.com/clojurewerkz/money(参见格式部分),它包裹joda-money。这不仅包括格式化,还包括其他常见问题,如舍入。

user=> (mf/format (ma/amount-of mc/USD 10000))
"$10,000.00"
user=> (mf/format (ma/amount-of mc/USD 10000) java.util.Locale/GERMANY)
"USD10.000,00"

修改

您可以通过amount-of舍入方法。 E.g。

user=> (mf/format (ma/amount-of mc/USD 10.111111111111111))

ArithmeticException Scale of amount 10.11111111111111 is greater than the scale of the currency USD  org.joda.money.Money.of (Money.java:74)

user=> (mf/format (ma/amount-of mc/USD 10.111111111111111 (java.math.RoundingMode/HALF_DOWN)))
"$10.11"

答案 1 :(得分:1)

另见班斯特:https://github.com/randomseed-io/bankster

(money/of :EUR 25)
; => #money[25.00 EUR]

(money/of 25 :EUR)
; => #money[25.00 EUR]

(money/of crypto/BTC 10.1)
; => #money/crypto[10.10000000 BTC]

(money/of BTC 10.1)
; => #money/crypto[10.10000000 BTC]

#money EUR
; => #money[0.00 EUR]

#money/crypto ETH
; => #money/crypto[0.000000000000000000 ETH]

#money[PLN 2.50]
; => #money[2.50 PLN]

#currency USD
; => #currency{:id :USD, :domain :ISO-4217, :kind :FIAT, :numeric 840, :scale 2}

(currency/symbol :USD)
; => "USD"

(currency/symbol :USD :en_US)
; => "$"

(currency/symbol :USDT)
; => "₮"

(currency/name :USDT)
; => "Tether"

(money/format #money[10 EUR])
; => "10,00 €"

(money/format #money[10 EUR] :en_US)
; => "€10.00"

(money/format #money[10 EUR] :pl {:currency-symbol-fn currency/name})
; => "10,00 euro"