What's the easiest way to parse numbers in clojure?

后端 未结 10 1588
长发绾君心
长发绾君心 2020-12-08 09:30

I\'ve been using java to parse numbers, e.g.

(. Integer parseInt  numberString)

Is there a more clojuriffic way that would handle both int

10条回答
  •  清歌不尽
    2020-12-08 10:00

    I find solussd's answer work great for my code. Based on it, here's an enhancement with support for Scientific notation. Besides, (.trim s) is added so that extra space can be tolerated.

    (defn parse-number
      "Reads a number from a string. Returns nil if not a number."
      [s]
      (if (re-find #"^-?\d+\.?\d*([Ee]\+\d+|[Ee]-\d+|[Ee]\d+)?$" (.trim s))
        (read-string s)))
    

    e.g.

    (parse-number "  4.841192E-002  ")    ;=> 0.04841192
    (parse-number "  4.841192e2 ")    ;=> 484.1192
    (parse-number "  4.841192E+003 ")    ;=> 4841.192
    (parse-number "  4.841192e.2 ")  ;=> nil
    (parse-number "  4.841192E ")  ;=> nil
    

提交回复
热议问题