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

时间:2013-04-12 10:38:10

标签: clojure

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

(= 3 3)

true

BUT

(= 3.0 3)

false

为什么?

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

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

1 个答案:

答案 0 :(得分:5)

如果是同一类型,它们就不一样了。

注意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的值,请使用==

  

==

     

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