scala不会采用12位整数

Chr*_*ton 12 scala

好吧所以我刚刚开始使用scala ..遇到了一个很大的奇怪问题.

import Math._
var num:Long=0
num+=600851475
num*=1000
println(num)
Run Code Online (Sandbox Code Playgroud)

该代码工作正常,但以下不编译错误说整数太大.

import Math._
var num:Long=0
num+=600851475000
println(num)
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?scala不能处理12位数字吗?:/

Dig*_*oss 27

你的常数应该是 600851475000L


Hoa*_*Tam 14

即使num被声明为Long,编译器也会将600851475000读取为Int,它只能处理[-2 ^ 32,2 ^ 32]中的数字[-2 ^ 31,2 ^ 31].将数字写为600851475000L告诉编译器将其视为Long,它将处理最多约18位的数字.

  • 为了精确地表示甚至Long无法处理的数字,有scala.BigInt(在标准库中).你仍然不能写37位的文字,但BigInt可以用String构造,所以你可以伪造它(只需用引号括起37位数字). (3认同)

Lau*_*ves 9

如果没有L(或l)后缀,则将文字的值视为32位int.