为什么Clojure/REPL处理浮点数和相同数字的整数表示不同?

Amo*_*kar 4 clojure

在Clojure中,我写了一个简单的函数,只是为了实现最终实现调试.

(= 3 3)
Run Code Online (Sandbox Code Playgroud)

true

(= 3.0 3)
Run Code Online (Sandbox Code Playgroud)

false

为什么?

我知道浮点运算存在问题,其中不应直接比较两个浮点值.

即使在Java中,3.0和3也是相同的,可能还有很多其他语言.

slo*_*oth 5

它们不是同一类型.

请注意java equal也如何返回false:

> (.equals 3.0 3)
false
Run Code Online (Sandbox Code Playgroud)

或者考虑以下java程序:

 public static void main(String []args){
   Integer i = 1000;
   System.out.println(i.equals(1000.0));
   System.out.println(i==1000.0);
 }
Run Code Online (Sandbox Code Playgroud)

输出:

假的


功能===功能之间存在差异

=

平等.如果x等于y,则返回true,否则返回false.与Java x.equals(y)相同...

所以如果你想比较nums的值,请使用 ==

==

如果nums都具有等效值(与类型无关),则返回非nil,否则返回false