clojure - 将“数字”字符串格式化为数字
问题描述
我想在 Clojure 中将“数字”字符串格式化为“字符串数字”。这是格式掩码:
"#,###,###,##0.00"
给定字符串“9999.99”,我希望收到“9,999.99”。
我将如何在 Clojure 中做到这一点而不求助于编写转换器函数,即使用format
或类似的东西?
解决方案
看来,在您的问题域中,二进制浮点数(例如 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 格式字符串约定,您将不得不编写一个转换器函数。
祝你好运。
推荐阅读
- javascript - 构造函数什么时候返回`this`,什么时候返回它被告知要返回的内容?
- google-apps-script - 根据单元格值自动将行复制到另一个工作表
- node.js - 如何在 Heroku 上正确部署 dist 和服务器端?
- c++ - 编译我的 3 个文件时,我收到错误,提示“operator=”不匹配
- javascript - 在 x 轴标签上方重新绘制值标签
- java - 构造函数注入在 Servlet + WELD + Tomcat 中不起作用
- r - R Shiny 根据 Userinput 动态添加 textinput 并打印 ui 输出
- algorithm - 在 3D 边界框中以最佳方式拟合其他球体之间的球体的算法?
- reactjs - 使用模拟函数测试 React 存储
- sockets - 这段代码中的权重在哪里更新?