浮点字面值中“0”作为前缀的含义是什么?

时间:2015-05-28 14:33:07

标签: java floating-point

使用“0”(零)作为整数文字中的前缀会将其基数更改为八进制。这就是为什么

System.out.println(010);

将打印8。但是使用“F”作为后缀

System.out.println(010F);

会使它浮动丢失八进制基数(返回十进制)并打印10.0

010F10F之间有什么区别吗?使用浮点数时,“0”前缀是否有任何意义?

3 个答案:

答案 0 :(得分:9)

来自Java语言规范,Floating Point literals

  

FloatingPointLiteral:

     
      
  • DecimalFloatingPointLiteral
  •   
  • HexadecimalFloatingPointLiteral
  •   
     

DecimalFloatingPointLiteral:

     
      
  • 数字。 [数字] [ExponentPart] [FloatTypeSuffix]
  •   
  • 。数字[ExponentPart] [FloatTypeSuffix]
  •   
  • Digits ExponentPart [FloatTypeSuffix]
  •   
  • Digits [ExponentPart] FloatTypeSuffix
  •   

其中Digits

  

数字:

     
      
  • 数字
  •   
  • 数字 [DigitsAndUnderscores] 数字
  •   
     

数字:

     
      
  • 0
  •   
  • NonZeroDigit
  •   
     

DigitsAndUnderscores:

     
      
  • DigitOrUnderscore {DigitOrUnderscore}
  •   
     

DigitOrUnderscore:

     
      
  •   
  • _
  •   
     

下划线

     
      
  • _ {_}
  •   

对于浮点文字,您可以包含任意数量的前导0

我在JLS中找不到任何解释为什么允许这样做的东西,但我可以想象它简化了解析。

答案 1 :(得分:6)

八进制表示法仅用于整数,不用于浮点数。这不是Java特有的。所以额外的0没有效果(除了让人类读者感到困惑)。

答案 2 :(得分:3)

只能在Java中以八进制格式(Base-8)表示整数文字。

jls-3.10.1 : Integer Literals

浮点数可以仅以十进制(或)十六进制形式表示。

jls-3.10.2 : Floating Literals