Tôi có thể dễ dàng đọc số 2e15
dưới dạng "hai nghìn tỷ" trong nháy mắt, nhưng đối với 2000000000000000
tôi phải đếm số 0, mất nhiều thời gian hơn và có thể dẫn đến lỗi.Java: Tại sao tôi không thể khai báo các kiểu số nguyên sử dụng ký pháp khoa học?
Tại sao tôi không thể khai báo int
hoặc long
bằng cách sử dụng chữ như 2e9
hoặc 1.3e6
? Tôi hiểu rằng sức mạnh âm 10, chẳng hạn như 2e-3
hoặc sức mạnh 10 ít hơn số chữ số thập phân, chẳng hạn như 1.0003e3
, sẽ tạo ra số dấu chấm động, nhưng tại sao Java không cho phép khai báo như vậy, và chỉ cần cắt ngắn phần dấu phẩy động và đưa ra cảnh báo nhẹ trong trường hợp giá trị kết quả là không tách rời?
Có lý do kỹ thuật nào khiến đây là ý tưởng tồi hay tất cả là về an toàn kiểu? Nó sẽ không thể tầm thường cho trình biên dịch chỉ đơn giản là phân tích một tuyên bố như
long x = 2e12
như long x = 2000000000000 //OK for long
và int y = 2.1234e3
như int y = 2123.4 //warning: loss of precision
[Eric Lippert] (http://blogs.msdn.com/b/ericlippert/archive/2012/04/ 03/10251901.aspx): "Tôi thường được hỏi tại sao trình biên dịch không thực hiện tính năng này hoặc tính năng đó, và tất nhiên câu trả lời luôn giống nhau: ** vì không ai thực hiện nó. ** Tính năng bắt đầu như chưa được thực hiện và chỉ được thực hiện khi mọi người dành nhiều nỗ lực thực hiện chúng: không cần nỗ lực, không có tính năng. Đây là câu trả lời không hài lòng tất nhiên, beca sử dụng thường là người hỏi câu hỏi đã đưa ra giả định rằng tính năng này rõ ràng là tốt đến mức chúng ta cần phải có lý do để ** không ** thực hiện nó. " –
@BrianRoach: Tôi biết số nguyên là gì.Tôi đã hỏi nếu có một lý do cụ thể là tại sao các số được biểu diễn dưới dạng dấu phẩy động nhưng đánh giá thành một giá trị ** không thể tách rời cũ: không thể chỉ định '2.3e3 == 2300' mà không có diễn viên rõ ràng. Có lẽ lý do đơn giản là những gì John Kugelman trích dẫn. Điều đó sẽ có ý nghĩa. Lý do tôi hỏi chỉ là tôi đã tò mò nếu có một lý do kỹ thuật tại sao một tính năng như vậy sẽ là một ý tưởng tồi. – odougs
Không, tôi nhận được phần đầu tiên ... nhưng đó không phải là ví dụ thứ hai của bạn; 'int y = 2123.4' –