Для тех, кто хочет разобрать более обычный строковый литерал в число, то есть строку, в которой нет других нечисловых символов. Вот два лучших подхода:
Использование взаимодействия с Java:
(Long/parseLong "333")
(Float/parseFloat "333.33")
(Double/parseDouble "333.3333333333332")
(Integer/parseInt "-333")
(Integer/parseUnsignedInt "333")
(BigInteger. "3333333333333333333333333332")
(BigDecimal. "3.3333333333333333333333333332")
(Short/parseShort "400")
(Byte/parseByte "120")
Это позволяет вам точно контролировать тип, в котором вы хотите разобрать номер, когда это имеет значение для вашего варианта использования.
Использование считывателя Clojure EDN:
(require '[clojure.edn :as edn])
(edn/read-string "333")
В отличие от использования read-string
из clojure.core
, которое небезопасно для использования на ненадежном вводе, edn/read-string
безопасно запускать на ненадежном вводе, таком как ввод пользователя.
Это часто более удобно, чем взаимодействие с Java, если вам не требуется особый контроль над типами. Он может анализировать любой числовой литерал, который может анализировать Clojure, например:
;; Ratios
(edn/read-string "22/7")
;; Hexadecimal
(edn/read-string "0xff")
Полный список здесь: https://www.rubberducking.com/2019/05/clojure-for-non-clojure-programmers.html#numbers