2015-05-28 17 views
5

Sử dụng "0" (số không) làm tiền tố trong một số nguyên thay đổi cơ sở của nó thành bát phân. Đây là lý do tại saoÝ nghĩa của "0" là tiền tố trong một dấu chấm động?

System.out.println(010); 

sẽ in 8. Nhưng sử dụng "F" như một hậu tố

System.out.println(010F); 

sẽ làm cho nó nổi mất cơ sở bát phân (sẽ trở lại thập phân) và sẽ in 10.0.

Có sự khác biệt nào giữa 010F10F không? Có tiền tố "0" bất kỳ loại ý nghĩa nào khi làm việc với phao không?

+0

'F' là' float'. –

+0

Tôi biết rằng, tôi đã tự hỏi tại sao Java cho phép "không" như một tiền tố cho các điểm nổi, cho rằng có vẻ là ... vô nghĩa. –

Trả lời

9

Từ ngôn ngữ Java Specification, trên Floating Point literals

FloatingPointLiteral:

  • DecimalFloatingPointLiteral
  • HexadecimalFloatingPointLiteral

DecimalFloatingPointLiteral:

  • Digits. [Chữ số] [ExponentPart] [FloatTypeSuffix]
  • .Chữ số [ExponentPart] [FloatTypeSuffix]
  • chữ số ExponentPart [FloatTypeSuffix]
  • chữ số [ExponentPart] FloatTypeSuffix

nơi Digits

chữ số:

  • Digit
  • Digit [DigitsAndUnderscores] Digit

Digit:

  • NonZeroDigit

DigitsAndUnderscores:

  • DigitOrUnderscore {} DigitOrUnderscore

DigitOrUnderscore:

  • Digit
  • _

dấu gạch dưới:

  • _ {_}
  • 0.123.

Bạn có thể có bất kỳ số nào hàng đầu 0 cho các dấu phẩy động.

Tôi không thể tìm thấy bất kỳ điều gì trong JLS giải thích tại sao điều này được phép, nhưng tôi có thể tưởng tượng nó đơn giản hóa việc phân tích cú pháp.

+0

Thú vị ... bằng cách áp dụng quy tắc thứ hai cho chữ số, bạn có thể có một số zeritary của số không là tiền tố. Một lần nữa, tôi không hiểu được điều này ... –

+0

Và nhờ câu trả lời của bạn, tôi mới nhận ra rằng bạn có thể có "Hệ thập lục phân dấu chấm động" và rằng, ví dụ, '0x0.1p0f' là hex cho 0.0625. Thật buồn nôn! –

+0

@LuigiCortese Những người nghiêm túc về sử dụng dấu phẩy động thập lục phân thường xuyên hơn thập phân: http://www.exploringbinary.com/hexadecimal-floating-point-constants/ (vì lý do tương tự mà bạn không chọn hai bit từ một số nguyên 'x' bằng cách tính' x & 3145728'). –

6

Ký hiệu phân cách chỉ được sử dụng cho số nguyên, không dùng cho số dấu phẩy động. Điều này không dành riêng cho Java. Vì vậy, thêm 0 không có hiệu lực (khác hơn là gây nhầm lẫn cho người đọc của con người).

+0

Cụ thể hơn, các số nguyên nguyên của cả kiểu 'int' và' long' có thể là bát phân: 010L vẫn là bát phân. Bạn không bao giờ ngừng học ... –

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