Java 0xp0打印0.0(十六进制浮点文字)

Java 0xp0打印0.0(十六进制浮点文字),java,Java,我只是想知道为什么会这样?既然它是编译的,那么它意味着什么呢 System.out.println(0xp0); // p? 输出: 0.0 解释如下: HexadecimalFloatingPointLiteral: HexSignificand BinaryExponent FloatTypeSuffixopt HexSignificand: HexNumeral HexNumeral . 0 x HexDigitsopt . HexDigits

我只是想知道为什么会这样?既然它是编译的,那么它意味着什么呢

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

0.0
解释如下:

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
,但它是一个浮点十六进制文字

对于十六进制浮点文字,至少需要一个数字(整数或小数部分),指数是必需的,浮点类型后缀是可选的。指数由ASCII字母p或p后跟可选带符号整数表示


请参阅规范。

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

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

对于我来说,使用
javac1.7.0\u02
,这是不可编译的。只有
0x0p0
有作用。@我正在使用的
1.7.0\u 05
房间的家伙。顺便说一句,我在Sun JDK上。这可能是相关的。另请参见:(我发现这里的答案对外行来说更清楚)查看
Double
类中的示例,如
public static final Double MAX_VALUE=0x1.ffffffffffffp+1023和<代码>公共静态最终双精度标准=0x1.0p-1022