为什么在scala中整数和浮点之间的比较如71 == 71.0是真的?

DPM*_*DPM 1 scala equality

我在scala解释器中得到了这个:

scala> val a:Float = 71F; val b:Int = 71; if (a==b) println ("?")
?
a: Float = 71.0
b: Int = 71
Run Code Online (Sandbox Code Playgroud)

我想知道这种比较的确切语义是什么.即使我对Scala有一个肤浅的知识,我猜浮点数运算(在这种情况下,我确保不使用与java的BigDecimal相当的东西,或者至少我认为)适用于这个例子.所以"a"不是持有数字71,因为"b"是,但接近它.

我认为任何整数到浮点比较产生错误会简化事情,但我相信我必须遗漏一些东西.

另外,我想知道这是否会导致代码中的任何错误.

ghi*_*hik 5

在Java中也发生了同样的事情,如JLS 15.21.1中所述.Scala可能为了兼容性而继承了这种语义.