Clojure 当我想要所有这些零时,我';我会要的
Clojure中是否有一些全局方法来设置浮点数的默认格式 我经常在嵌套集合中使用浮点数。举个小例子,这个表达式Clojure 当我想要所有这些零时,我';我会要的,clojure,floating-point,number-formatting,Clojure,Floating Point,Number Formatting,Clojure中是否有一些全局方法来设置浮点数的默认格式 我经常在嵌套集合中使用浮点数。举个小例子,这个表达式 (str " -> " linkvec) 在我现在正在编写的一些代码中对两个向量求值,生成: -> [:source1 :output 0.2 0.2 1] -> [:source100 :output 0.6000000000000001 0.6000000000000001 100] 大多数时候,我不在乎小数点后16位出现的小舍入错误。我更喜欢将所有浮点输
(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
显式格式化。否则,每次我制作或打印一个包含浮点数的集合的字符串时,我都必须调用代码来生成该集合的修改版本,其中的数字会被修剪。我认为str
无法更改(它只调用toString),但是对于print
/println
您可以使用未记录的多方法执行此操作:
(defmethod print-method java.lang.Double [value ^java.io.Writer w]
(.write w (.format (java.text.DecimalFormat. "0.###") value)))