【发布时间】:2016-08-26 01:37:43
【问题描述】:
Clojure 中是否有一些全局方法可以设置浮点数的默认格式?
我经常在嵌套集合中使用浮点数。举个小例子,这个表达式,
(str " -> " linkvec)
在我现在正在处理的一些代码中对几个向量进行评估,产生:
-> [:source1 :output 0.2 0.2 1]
-> [:source100 :output 0.6000000000000001 0.6000000000000001 100]
大多数时候,我并不关心小数点后 16 位出现的小舍入错误。我希望将所有浮点输出四舍五入到最接近的 0.001,并在四舍五入后删除尾随零。所以,上面的结果看起来像这样:
-> [:source1 :output 0.2 0.2 1]
-> [:source100 :output 0.6 0.6 100]
请注意,所需的输出是0.6 0.6,而不是0.600 0.600。
当然我可以定义一个类似的函数:
(defn sigfigs [x]
(format "%.3f" (-> x (* 1000) (math/round) (/ 1000.0))))
但是我不得不从任何地方调用它。如果我可以将默认数字格式化程序设置为 sigfigs 或类似的东西,那就太好了,这样 str、println 等就会调用它,除非我使用 %f 明确格式化。否则,每次我创建或打印涉及包含浮点数的集合的字符串时,我都必须调用代码来生成该集合的修改版本,其中数字被修剪。
【问题讨论】:
标签: clojure floating-point number-formatting