如何比较scala中的两种不同类型的对象?

skg*_*skg 3 floating-point scala

当我在scala解释器中检查值时,如:

scala> 1==1.0000000000000001

res1: Boolean = true

scala> 1==1.000000000000001

res2: Boolean = false
Run Code Online (Sandbox Code Playgroud)

在这里,我没有得到与"scala编译器如何将这些解释为整数或浮点或双精度(和比较)"相关的清晰视图.

Tom*_*icz 9

它与Scala并不相关,它更像是一个浮点运算问题.首先,IntDouble它相比,它将被投射IntDouble(总是安全的).第二种情况很明显 - 价值观不同.

第一种情况会发生的情况是,Double类型无法存储许多有效数字(在您的情况下为17,64位浮点可以存储最多16位十进制数字),因此它将值舍入为1.并且1 == 1.