为什么Scala不能像所有其他语言一样正确地进行数学运算?与float一样。
var x: Double = 3/2
返回1
,但3/2应该等于1.5。
答案 0 :(得分:3)
请注意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) // because 51 / 50 == 1
困惑可能源于它们看起来很相似
val x: Int = 2
val x: Double = 2.0
val x: Char = '2'