2

ここでClojureの初心者。clojure 1.4.0 REPL を使用します。

(== 2    2.0)      ; true
(== 2.0  2.0M)     ; true
(== 2    2.0M)     ; false

これは論理違反ではありませんか?最初の 2 つが真である場合、3 つ目も真である必要はありませんか?

4

2 に答える 2

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
于 2012-11-30T03:50:27.667 に答える
1

bigDecimals は、値とスケールの両方が同じ場合にのみ等しいと見なされます。

user> (== 2 (. 2.0M stripTrailingZeros))
true
user> (== 2 2.0M )
false

bigdecimals の間でさえ、もっとばかげた例が発生します。

user> (== 0.000000M 0.0M)
false

個人的には、これは数学的な意味で「間違っている」と考えており、このバグを開いて、これを変更することに関心があるかどうかを確認しました。

于 2012-11-30T19:45:34.403 に答える