首页 > 解决方案 > 将“数字”字符串格式化为数字

问题描述

我想在 Clojure 中将“数字”字符串格式化为“字符串数字”。这是格式掩码:

"#,###,###,##0.00"

给定字符串“9999.99”,我希望收到“9,999.99”。

我将如何在 Clojure 中做到这一点而不求助于编写转换器函数,即使用format或类似的东西?

标签: clojure

解决方案


看来,在您的问题域中,二进制浮点数(例如 IEEE-754)的缺点和限制给您带来了一些困难。也许您应该考虑利用 Clojure 中已经内置的 BigDecimal 支持。在 Clojure 中,BigDecimal 常量和浮点常量之间的区别是单个字符;例如 1.2 是 Double,而 1.2M 是 BigDecimal。该bigdec函数可用于即时将事物转换为 BigDecimal。例如,

(format "%,.2f" (bigdec "9999999999999999.12"))

生产

"9,999,999,999,999,999.12"

正如预期的那样。算术函数,如*+-/也可以按预期工作。

但是,这并不能解决您的基本问题。如果您的格式字符串不遵循 Java/Clojure 格式字符串约定,您将不得不编写一个转换器函数。

祝你好运。


推荐阅读