在Clojure中,我写了一个简单的函数,只是为了实现最终实现调试.
(= 3 3)
Run Code Online (Sandbox Code Playgroud)
是 true
但
(= 3.0 3)
Run Code Online (Sandbox Code Playgroud)
是 false
为什么?
我知道浮点运算存在问题,其中不应直接比较两个浮点值.
即使在Java中,3.0和3也是相同的,可能还有很多其他语言.
它们不是同一类型.
请注意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