“0”作为浮点文字中的前缀是什么意思?
What's the meaning of "0" as prefix in a floating point literal?
在整数文字中使用“0”(零)作为前缀会将其基数更改为八进制。这就是为什么
System.out.println(010);
将打印 8
。但是使用 "F" 作为后缀
System.out.println(010F);
将使它失去八进制基数(回到十进制)并打印 10.0
。
010F
和10F
有区别吗?使用浮点数时,“0”前缀有任何意义吗?
八进制符号仅用于整数,不适用于浮点数。这并非特定于 Java。所以额外的 0 没有任何效果(除了让人类感到困惑 reader)。
在 Java.
中只有整数文字可以用八进制形式(Base-8)表示
浮点数只能以十进制(或)十六进制形式表示。
来自 Java 语言规范,在 Floating Point literals
FloatingPointLiteral:
- DecimalFloatingPointLiteral
- HexadecimalFloatingPointLiteral
DecimalFloatingPointLiteral:
- Digits . [Digits] [ExponentPart] [FloatTypeSuffix]
- . Digits [ExponentPart] [FloatTypeSuffix]
- Digits ExponentPart [FloatTypeSuffix]
- Digits [ExponentPart] FloatTypeSuffix
其中 Digits
Digits:
- Digit
- Digit [DigitsAndUnderscores] Digit
Digit:
- 0
- NonZeroDigit
DigitsAndUnderscores:
- DigitOrUnderscore {DigitOrUnderscore}
DigitOrUnderscore:
- Digit
- _
Underscores:
- _ {_}
对于浮点文字,您可以有任意数量的前导 0
。
我在 JLS 中找不到任何解释为什么允许这样做的内容,但我可以想象它简化了解析。
在整数文字中使用“0”(零)作为前缀会将其基数更改为八进制。这就是为什么
System.out.println(010);
将打印 8
。但是使用 "F" 作为后缀
System.out.println(010F);
将使它失去八进制基数(回到十进制)并打印 10.0
。
010F
和10F
有区别吗?使用浮点数时,“0”前缀有任何意义吗?
八进制符号仅用于整数,不适用于浮点数。这并非特定于 Java。所以额外的 0 没有任何效果(除了让人类感到困惑 reader)。
在 Java.
中只有整数文字可以用八进制形式(Base-8)表示浮点数只能以十进制(或)十六进制形式表示。
来自 Java 语言规范,在 Floating Point literals
FloatingPointLiteral:
- DecimalFloatingPointLiteral
- HexadecimalFloatingPointLiteral
DecimalFloatingPointLiteral:
- Digits . [Digits] [ExponentPart] [FloatTypeSuffix]
- . Digits [ExponentPart] [FloatTypeSuffix]
- Digits ExponentPart [FloatTypeSuffix]
- Digits [ExponentPart] FloatTypeSuffix
其中 Digits
Digits:
- Digit
- Digit [DigitsAndUnderscores] Digit
Digit:
- 0
- NonZeroDigit
DigitsAndUnderscores:
- DigitOrUnderscore {DigitOrUnderscore}
DigitOrUnderscore:
- Digit
- _
Underscores:
- _ {_}
对于浮点文字,您可以有任意数量的前导 0
。
我在 JLS 中找不到任何解释为什么允许这样做的内容,但我可以想象它简化了解析。