Math Clojure乘法给出了奇怪的结果
出于某种原因,我从乘法函数中得到了奇怪的结果。以下是节目:Math Clojure乘法给出了奇怪的结果,math,clojure,floating-point,calculator,multiplication,Math,Clojure,Floating Point,Calculator,Multiplication,出于某种原因,我从乘法函数中得到了奇怪的结果。以下是节目: (ns scalc.core) (defn add [numbers] (reduce + numbers)) (defn sub [numbers] (reduce - numbers)) (defn mul [numbers] (reduce * numbers)) (defn div [numbers] (reduce / numbers)) (defn numchoose [] (let [nums
(ns scalc.core)
(defn add [numbers]
(reduce + numbers))
(defn sub [numbers]
(reduce - numbers))
(defn mul [numbers]
(reduce * numbers))
(defn div [numbers]
(reduce / numbers))
(defn numchoose []
(let [nums (re-seq #"\d+" (read-line))]
(map #(Float/parseFloat %) nums)))
(defn delegate []
(println "What operation would you like to do?: ")
(let [operation (read-line)]
(when (= operation "add")
(println "You chose to add.")
(println "What numbers? ")
(println (add (numchoose))))
(when (= operation "mul")
(println "You chose to multiply.")
(println "What numbers? ")
(println (mul (numchoose))))
(when (= operation "div")
(println "You chose to divide.")
(println "What numbers? ")
(println (div (numchoose))))
(when (= operation "sub")
(println "You chose to subtract.")
(println "What numbers? ")
(println (sub (numchoose))))))
(defn -main
[& args]
(delegate))
以下是我的结果:
~/clj/scalc 1/7 % lein trampoline run src/scalc/core.clj
What operation would you like to do?:
mul
You chose to multiply.
What numbers?
10 1.5 3
150.0
~/clj/scalc 1/7 % lein trampoline run src/scalc/core.clj
What operation would you like to do?:
mul
You chose to multiply.
What numbers?
654321 1.5
3271605.0
~/clj/scalc 1/7 % lein trampoline run src/scalc/core.clj
What operation would you like to do?:
add
You chose to add.
What numbers?
1 2 3 4 5 6
21.0
~/clj/scalc 1/7 % lein trampoline run src/scalc/core.clj
What operation would you like to do?:
sub
You chose to subtract.
What numbers?
100 90 4
6.0
~/clj/scalc 1/7 % lein trampoline run src/scalc/core.clj
What operation would you like to do?:
div
You chose to divide.
What numbers?
64 8 2
4.0
唯一不正确的是乘法,并且只有在使用小数时才正确。您使用的正则表达式\d+只匹配数字序列,而不考虑小数点的可能性。因此,在第一个乘法示例中,1.5被处理为两个单独的数字1和5,并且整个乘积被计算为10*1*5*3,即150。类似地,对于第二个,得到654321*1*5=3271605
在空白处拆分读取行的结果是否比使用re-seq更好?您使用的正则表达式\d+只匹配数字序列,而不考虑小数点的可能性。因此,在第一个乘法示例中,1.5被处理为两个单独的数字1和5,并且整个乘积被计算为10*1*5*3,即150。类似地,对于第二个,得到654321*1*5=3271605
在空白处拆分读取行的结果是否比使用re seq更好?谢谢。我明白,我已经用split替换了re-seq。谢谢。我明白,我已经用split替换了re-seq。