Clojurescript中的货币格式

时间:2015-10-20 22:30:45

标签: javascript localization clojurescript

在Javascript中进行基于区域设置的货币格式化,你可以

(550.753).toLocaleString(undefined, {style: 'currency', currency: 'USD'})
// # $550.75 in en-US

你如何在Clojurescript中做同样的事情?

我已经尝试了

(.toLocaleString 550.753 nil {:style "currency" :currency "USD"}) 

无济于事。

2 个答案:

答案 0 :(得分:3)

运行您的JS示例,我得到Uncaught TypeError: Cannot convert undefined or null to object(…),因为您将null作为区域设置传递。 ClojureScript中也会发生同样的错误。 toLocaleString要求您传递区域设置。

修复此问题以提供de-DE区域设置:

JavaScript的:

(550.753).toLocaleString('de-DE', {style: 'currency', currency: 'EUR'})
// "550,75 €"

ClojureScript:

(.toLocaleString 550.753 "de-DE" #js {:style "currency" :currency "USD"})
;; "550,75 $"

#js用于将ClojureScript地图转换为JavaScript对象。

如果您想改用默认语言环境,请传递#js []js/undefined

答案 1 :(得分:1)

由于 Clojurescript 广泛使用 Google Closure 库,您可以利用它的 i18n 货币格式功能

(import '[goog.i18n NumberFormat]
        '[goog.i18n currency])

(let [fmt (NumberFormat. (.getLocalCurrencyPattern currency "USD"))]
  (.format fmt 123.456)) ;; => "$123,46"