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

时间:2020-04-23 17:33:31

标签: scala double

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

var x: Double = 3/2 

返回1,但3/2应该等于1.5。

1 个答案:

答案 0 :(得分:3)

请注意integer literalfloating 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,因为2Int,而1Int,因此我们需要除法整数之间。由于Int代表整数

assert(3 / 2 == 1)

关键是要理解 literals 只是一种特殊的速记符号,代表特定类型中的特定值。例如考虑字符文字

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

困惑可能源于它们看起来很相似

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