当我检查scala解释器中的值时:
scala> 1==1.0000000000000001
res1: Boolean = true
scala> 1==1.000000000000001
res2: Boolean = false
这里我没有得到与“scala编译器如何将这些解释为整数或浮点或双精度(和比较)”相关的清晰视图。
答案 0 :(得分:9)
它与Scala并不相关,它更像是ieee-754浮点运算问题。首先,在将Int
与Double
进行比较时,它会将Int
投放到Double
(始终安全)。第二种情况很明显 - 价值观不同。
第一种情况会发生的情况是Double
类型无法存储许多有效数字(在您的情况下为17,64位浮点数可以存储最多16位小数),因此它会使价值为1
。并1 == 1
。