2010-09-05 38 views
10

ok vì vậy tôi chỉ mới bắt đầu trong scala .. chạy vào một vấn đề lạ với một số lượng lớn.scala sẽ không mất một số nguyên 12 chữ số

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

mã đó hoạt động tốt, nhưng những điều sau đây không biên dịch với lỗi nói số nguyên quá lớn.

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

có chuyện gì? scala có thể xử lý số 12 chữ số không? :/

+1

Có lẽ bạn nên sử dụng một chữ số nguyên dài (có chữ 'L')? tức là, '600851475000L' –

Trả lời

22

liên tục của bạn nên được 600851475000L

9

Without L (hoặc l) hậu tố, giá trị của văn chương được coi là một int 32-bit.

14

Mặc dù num được khai báo là Long, 600851475000 được trình biên dịch đọc là Int, chỉ có thể xử lý các số trong [-2^32, 2^32)[-2^31, 2^31). Viết số là 600851475000L yêu cầu trình biên dịch coi nó là Long, sẽ xử lý số lên tới 18 chữ số.

+0

Phạm vi của Int thực sự là [-2^31, 2^31), nhưng điểm khác là đúng trên mục tiêu. –

+3

Để biểu diễn chính xác các số mà thậm chí Long không thể xử lý, có scala.BigInt (trong thư viện chuẩn). Bạn vẫn không thể viết các chữ số 37 chữ số, nhưng BigInt có thể được xây dựng từ một String, vì vậy bạn có thể giả mạo nó (chỉ cần bọc chữ số 37 chữ số trong dấu ngoặc kép). –

+0

@Rex Kerr - Cảm ơn bạn đã đánh bắt! –

Các vấn đề liên quan