如何编写将十进制数字符串转换为十进制数字和将小数转换为字符串的函数?如何将数字字符串转换为数字(十进制)并将数字转换为字符串
12
A
回答
2
本示例将数字字符串转换为数字。
(defn String->Number [str]
(let [n (read-string str)]
(if (number? n) n nil)))
样本:
user=> (String->Number "4.5")
4.5
user=> (str 4.5)
"4.5"
user=> (String->Number "abc")
nil
1
从你的问题,你似乎想切换功能,这是一个可以在许多读取并转换为字符串,还读一个字符串,返回一个数字,如果该字符串包含数字,如123.0或“123.0”。
下面是一个例子:
(defn cvt-str-num [val]
(if (try
(number? val)
(catch Exception e (str "Invalid number: " (.getMessage e))))
(str val)
(let [n-val (read-string val)]
(if (number? n-val)
n-val
nil))))
我无法看到周围的用N-VAL结合的方式,因为需要一个临时的地方来存储读取字符串返回值,因此它可以被测试作为一个数字。如果它是一个数字,则返回;否则返回零。
1
注意read-string
给你一个浮点数,而不是一个小数:
user=> (.getClass (read-string "1.01"))
java.lang.Double
你回来就像你想要的打印,但它不是数字,没错。
user=> (new BigDecimal (read-string "1.01"))
1.0100000000000000088817841970012523233890533447265625M
您可以使用java.math.BigDecimal
代替,避免浮点并发症:
user=> (new BigDecimal "1.01")
1.01M
user=> (.toString (new BigDecimal "1.01"))
"1.01"
+1
试试这个(阅读字符串“1.01M”) – BLUEPIXY
29
有非常方便的Clojure的功能从任何转换为字符串,并从类似的东西了一些为BigDecimal:
user=> (bigdec "1234")
1234M
user=> (str 1234M)
"1234"
我想这是clojure规范的方式。
+3
这应该是被接受的答案。 – nha
相关问题
- 1. 将字符串数组转换为十六进制数字C
- 2. 将字符串转换为十进制
- 3. 字符串转换为数字限定的十进制数字
- 4. Builtin函数将字节转换为十六进制字符串
- 5. 将URL的十六进制数字转换为字符串
- 6. 将10位数字转换为十六进制字符串
- 7. BuiltIn函数将十六进制字符串转换为字节
- 8. 将大十进制数字转换为Javascript中的字符串
- 9. 将十六进制字符串转换为mySQL中的数字
- 10. Python将十进制数字转换为不带“。”的字符串。
- 11. 将字符串转换为十进制 - 保留数字
- 12. 将字符串转换为十进制字符串并返回十进制
- 13. 将字符串十进制转换为十六进制数
- 14. 将ASCII字符转换为十六进制转义字符串
- 15. 将十六进制字符串转换为字符串
- 16. 将字符串转换为十六进制字符串
- 17. Swift3将字符串值转换为十六进制字符串
- 18. 如何将'整数'字符串转换为'十六进制'字符串C
- 19. 如何将字符串转换为字符串包含十六进制字符
- 20. 将十六进制字符串转换为无符号字符[]
- 21. Knockout.js将数字转换为字符串
- 22. Android:EditTextPreference将字符串转换为数字
- 23. 将数字字符串转换为sqldbtype
- 24. C#将字符串转换为数字
- 25. 将“字符串”值转换为数字
- 26. 将字符串转换为数字node.js
- 27. 将字符串转换为数字
- 28. 将字符串转换为数字
- 29. 将字符串转换为数字Javascript
- 30. TypeScript将字符串转换为数字
@octopusgrabbus - 感谢您的帮助。 – BLUEPIXY
你可能不应该在现实生活中使用它。从文档中,它可以执行任意代码https://clojuredocs.org/clojure.core/read-string这是一个巨大的安全漏洞。我认为'bigdec'是一个更好的解决方案。 –