3

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

scala> 1==1.0000000000000001

res1: Boolean = true

scala> 1==1.000000000000001

res2: Boolean = false

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

4

1 回答 1

9

它不是真正的 Scala 相关,它更多的是浮点算术问题。首先,当与它进行比较时IntDouble它会Int转换为Double(总是安全的)。第二种情况很明显——价值观不同。

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

于 2012-04-07T20:41:15.587 回答