Clojure新手在这里。使用clojure 1.4.0 REPL;
(== 2 2.0) ; true
(== 2.0 2.0M) ; true
(== 2 2.0M) ; false
这不是逻辑违规吗?如果前两个是真的,那么第三个也不是真的吗?
答案 0 :(得分:1)
==
为type-independent
,请尝试以下操作:
user=> (== (bigdec 2.0) 2.0M)
true
user=> (type (bigdec 2.0))
java.math.BigDecimal
user=> (type 2.0M)
java.math.BigDecimal
答案 1 :(得分:1)
bigDecimals只有在值和比例中相同时才被认为是相同的在这种情况下,其中一个比另一个有更多有效数字:
user> (== 2 (. 2.0M stripTrailingZeros))
true
user> (== 2 2.0M )
false
即使在bigdecimals之间也会出现一个更荒谬的例子:
user> (== 0.000000M 0.0M)
false
我个人认为这在数学意义上是“错误的”并打开this bug以确定是否有兴趣改变它。