为什么Scala不能像所有其他语言一样正确地进行数学运算?与浮点数相同。
var x: Double = 3/2
返回1
,但3/2应该等于1.5。
注意integer literal和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
是Int
,因此将表达式1
键入为Int
,因此我们在整数之间进行除法。因为Int
代表整数,所以我们有
assert(3 / 2 == 1)
关键是要理解literals只是表示特定类型中特定值的特殊速记符号。例如考虑字符文字
assert('3' / '2' == 1)
混乱可能源于它们看起来很相似的事实
val x: Int = 2
val x: Double = 2.0
val x: Char = '2'