在clojure或jython中: 说我有一个号码4.21312312312312 我怎么能得到一个只有前2位小数的数字。对于上面的例子,它将返回4.21。 感谢
答案 0 :(得分:10)
Clojure在clojure.contrib.math中有一个圆函数 - 假设你想要Clojure可以处理的所有不同可能数值类型的正确行为,最好使用这个函数。
在这种情况下,假设您希望将结果作为任意精度的BigDecimal,一个简单的方法是构建一个小帮助函数,如下所示:
(use 'clojure.contrib.math)
(defn round-places [number decimals]
(let [factor (expt 10 decimals)]
(bigdec (/ (round (* factor number)) factor))))
(round-places 4.21312312312312 2)
=> 4.21M
答案 1 :(得分:5)
我想我在进一步研究后得到了这个
(format "%.2f" 4.21312312312312)
应返回4.21
答案 2 :(得分:3)
乘以你需要的10^numberofdecimals
,然后再分割。这并不能保证字符串表示将正确舍入,但应该在大多数情况下都能正常工作。例如:
(* 0.01 (Math/round (* 100 (float (/ 7 8)))))
屈服0.88
答案 3 :(得分:1)
更进一步,您可以参数化小数位数:
(defn- factor [no-of-decimal-places]
(.pow (BigInteger. "10") no-of-decimal-places))
(defn truncate [value decimal-places]
(let [divide-and-multiply-by (factor decimal-places)]
(float (/ (int (* divide-and-multiply-by value)) divide-and-multiply-by))))
(truncate 2.23999999 2)
=> 2.23
(truncate 2.23999999 3)
=> 2.239
(truncate 2.23999999 4)
=> 2.2399
答案 4 :(得分:0)
发现这个帖子正在寻找类似的截断答案。
不确定是否有更好的解决方案,但想出了以下内容。
对于非舍入,您可以将100乘以100(小数点后2位,1000表示3等),转换为整数然后除以原始因子,然后转换为浮点数字输出。例如:
(float (/ (int (* 100 123.1299)) 100))
=> 123.12
(float (/ (int (* 100 123.1209)) 100))
=> 123.12