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代码>