Если вы хотите проверить, содержит ли строка символ, вы можете использовать регулярное выражение:
(re-find #"\." astr)
Или:
(some #(= \. %) astr)
Или:
(contains? (into #{} astr) \.)
Или вы можете использовать includes?
из clojure.contrib.seq-utils , который делает это тоже.
У Clojure уже есть читатель, который умеет различать целые и двойные числа, поэтому, если вы уверены, что ваша строка содержит только цифры, вы можете использовать ее. (Однако будьте осторожны, это читает что угодно, а не только цифры. Это потенциально опасно. Не используйте это, если есть вероятность, что в вашей строке есть что-то, кроме числа.)
Обратите внимание, Clojure также обрабатывает случай, когда целое число слишком велико, чтобы поместиться в нативный int
без переполнения. Если вы хотите разобрать целые числа, вы можете посмотреть на функцию bigint вместо parseInt
.
user> (class (read-string "2.5"))
java.lang.Double
user> (class (read-string "2"))
java.lang.Integer
user> (class (read-string "2000000000000"))
java.math.BigInteger
Если ваша функция является предикатом, в Clojure принято называть ее decimal?
вместо is-decimal
. На самом деле ваша функция - это больше анализатор чисел, поэтому лично я бы назвал это parse-number
или string-to-number
.