在 Clojure 中,我写了一个简单的函数,一直调试到最后才实现。
(= 3 3)
是true
但
(= 3.0 3)
是false
为什么?
我知道浮点运算存在问题,不应该直接比较两个浮点值。
即使在 Java 中,3.0 和 3 也将是相同的,可能还有很多其他语言。
在 Clojure 中,我写了一个简单的函数,一直调试到最后才实现。
(= 3 3)
是true
但
(= 3.0 3)
是false
为什么?
我知道浮点运算存在问题,不应该直接比较两个浮点值。
即使在 Java 中,3.0 和 3 也将是相同的,可能还有很多其他语言。
它们不是同一类型。
注意 java 是如何equal
返回 false 的:
> (.equals 3.0 3)
false
或考虑以下 java 程序:
public static void main(String []args){
Integer i = 1000;
System.out.println(i.equals(1000.0));
System.out.println(i==1000.0);
}
输出:
假
真
=
平等。如果 x 等于 y,则返回 true,否则返回 false。与 Java x.equals(y) 相同...
所以如果你想比较数字的值,使用==
==
如果 nums 都具有等效值(与类型无关),则返回非 nil,否则返回 false