假设你有字符串“100.0” 如何将其转换为长型。
答案 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/parseDouble
和Long/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.core
,bigdec
会有效地强制转换为Number
类型,然后您可以强制转换为Long
。
e.g。你的字符串是长还是双 -
user=> (long (bigdec "100"))
100
或
user=> (long (bigdec "100.0"))
100