(defn as-currency "Money amounts are transmitted as \"$2.44\". Parse this and return a numeric type." [currency-amount] ;; strip off the leading "$" (let [stripped (subs currency-amount 1) _ (println "stripped" currency-amount "->" stripped) decimal (bigdec stripped) _ (println "bigdec" stripped "->" decimal)] decimal)) ;;;; Re-evaluating the sample calculation gives us this: ;; stripped $1200.20 -> 1200.20 ;; bigdec 1200.20 -> 1200.20M ;; stripped $0.03 -> 0.03 ;; bigdec 0.03 -> 0.03M ;; stripped $120.00 -> 120.00 ;; bigdec 120.00 -> 120.00M ;; stripped $5.99 -> 5.99 ;; bigdec 5.99 -> 5.99M ;; stripped $20 -> 20 ;; bigdec 20 -> 20M ;; stripped $12.33 -> 12.33 ;; bigdec 12.33 -> 12.33M ;; stripped -$4.50 -> $4.50 ;; NumberFormatException java.math.BigDecimal. (BigDecimal.java:494)