2010-09-05 18 views
10

ok quindi sto appena iniziando in scala .. ho incontrato uno strano problema con un numero elevato.scala non prenderà un numero intero a 12 cifre

import Math._ 
var num:Long=0 
num+=600851475 
num*=1000 
println(num) 

che il codice funziona bene, ma il seguente non compilare con un errore che dice il numero intero è troppo grande.

import Math._ 
var num:Long=0 
num+=600851475000 
println(num) 

cosa succede? può scala non gestire un numero di 12 cifre? :/

+1

Forse dovresti usare un letterale intero lungo (suffisso con una "L")? vale a dire, 600851475000L' –

risposta

22

vostro costante dovrebbe essere 600851475000L

9

Senza L (o l) suffisso, il valore del letterale viene trattato come un 32 bit int.

14

Anche se num è dichiarato per essere un lungo, 600.851.475.000 viene letto dal compilatore di essere un Int, che può gestire solo i numeri in [-2^32, 2^32)[-2^31, 2^31). Scrivere il numero come 600851475000L dice al compilatore di trattarlo come un lungo, che gestirà numeri fino a circa 18 cifre.

+0

L'intervallo di Int è in realtà [-2^31, 2^31), ma il punto è altrimenti a destra. –

+3

Per rappresentare con precisione i numeri che anche Long non può gestire, c'è scala.BigInt (nella libreria standard). Non è ancora possibile scrivere valori letterali a 37 cifre, ma BigInt può essere costruito da una stringa, in modo da poterlo simulare (basta racchiudere il letterale di 37 cifre tra virgolette). –

+0

@Rex Kerr - Grazie per averlo capito! –

Problemi correlati