Clojure:如何将字符串转换为long?

时间:2014-06-23 14:45:28

标签: clojure type-conversion

假设你有字符串“100.0” 如何将其转换为长型。

5 个答案:

答案 0 :(得分:8)

字符串" 100.0"是Double的字符串表示形式,因此如果您尝试将其解析为long,您将获得异常。

使用Java原始包装器中的方法。

(let [s "100.0"] (Double/valueOf s))
> 100.0
(let [s "100.0"] (class (Double/valueOf s)))
> java.lang.Double

或者如果你的字符串很长,你可以使用类java.lang.Long中的方法解析它:

(let [s "100"] (Long/valueOf s))
> 100
(let [s "100"] (class (Long/valueOf s)))
> java.lang.Long

答案 1 :(得分:2)

user=> (long (Float/valueOf "100.0"))
100

user=> (type (long (Float/valueOf "100.0")))
java.lang.Long

答案 2 :(得分:2)

user=> (-> "100.0" Double/parseDouble long)
100

user=> (->> "100.0" (re-find #"\d+") Long/parseLong)
100

Double/parseDoubleLong/parseLong都返回原始数值, 而*/valueOf返回一个盒装对象。

答案 3 :(得分:2)

您可以使用java.text.NumberFormat

自动获取正确的长或双类型
user=> (.parse (java.text.NumberFormat/getInstance) "100.0")
100
user=> (type *1)
java.lang.Long

user=> (.parse (java.text.NumberFormat/getInstance) "100.5")
100.5
user=> (type *1)
java.lang.Double

答案 4 :(得分:1)

如果您只想使用clojure.corebigdec会有效地强制转换为Number类型,然后您可以强制转换为Long

e.g。你的字符串是长还是双 -

user=> (long (bigdec "100"))
100

user=> (long (bigdec "100.0"))
100