避免溢出

时间:2014-01-27 16:04:05

标签: scala long-integer

如果没有将L附加到数字,此Stackoverflow post讨论了数字溢出的潜在问题:

以下是REPL的一个例子:

scala> 100000 * 100000 // no type specified, so numbers are `int`'s
res0: Int = 1410065408

避免此问题的一种方法是使用L

scala> 100000L * 100000L
res1: Long = 10000000000

或者指定数字的类型:

scala> val x: Long = 100000
x: Long = 100000

scala> x * x
res2: Long = 10000000000

正确指定数字类型的最佳做法是什么?

1 个答案:

答案 0 :(得分:8)

如果你使用的话,总是使用L。否则,您仍然可能遇到问题:

scala> val x: Long = 10000000000
<console>:1: error: integer number too large
       val x: Long = 10000000000
                     ^

scala> val x = 10000000000L
x: Long = 10000000000

由于类型归属而导致的转换发生在文字被解释为Int之后。