为什么 3/2 等于 1 而不是 1.5?

Why does 3/2 equal 1 instead of 1.5?

为什么 Scala 不能像所有其他语言一样正确地进行数学计算?与 float 相同。

var x: Double = 3/2 

returns 1 但是 3/2 应该等于 1.5。

注意integer literal and floating point literal

的区别
2    // integer literal representing a value of type Int
2.0  // double precision floating point literal representing a value of type Double

因此表达式 3/2 被键入为 Int 因为 2 是一个 Int1 是一个 Int,因此我们在整数之间有除法。因为 Int 代表整数,所以我们有

assert(3 / 2 == 1)

关键是要了解 文字 只是一种特殊的 shorthand 表示法,表示特定类型中的特定值。例如考虑字符文字

assert('3' / '2' == 1)   // because 51 / 50 == 1

混淆可能源于它们看起来非常相似

val x: Int    = 2
val x: Double = 2.0
val x: Char   = '2'