0xp0打印0.0(hex浮点数字)

我只是想知道为什么这个编译? 它是什么意思,因为它编译?

System.out.println(0xp0); // p? 

OUTPUT:

 0.0 

这是一个浮点hex文字。

对于hex浮点文字,至少需要一个数字(在整数或小数部分中),并且指数是必需的,浮点类型后缀是可选的。 指数由ASCII字母p或P表示,后跟可选的有符号整数。

请参阅此处的规范。

JLS解释说:

 HexadecimalFloatingPointLiteral: HexSignificand BinaryExponent FloatTypeSuffixopt HexSignificand: HexNumeral HexNumeral . 0 x HexDigitsopt . HexDigits 0 X HexDigitsopt . HexDigits BinaryExponent: BinaryExponentIndicator SignedInteger BinaryExponentIndicator:one of p P 

基于以上所述,我希望在p之前有一个强制的.HexDigit

仅供参考,以下是如何手动将以下内容转换为十进制数字:

 double hfpl = 0x1e.18p4; System.out.println(hfpl); // 481.5 

在此处输入图像描述