(Java) 为什么写 0x12.2P2 是正确的,但 0x12.2F 不是?

(Java) Why is writing 0x12.2P2 correct but not 0x12.2F?

我刚开始学习java,对文字有疑问。

代码:

class what_is_px_literals {
public static void main(String args[])
{
    float a = 0x12; //Question Line
    System.out.print("\nThis is the number in:\n\tHexdecimal:\t0x12.2\n\tDecimal:\t"+a+"\n\tWorking of P\t"+0x12.2P2+"\n");
}
}

以上代码编译无误。但是将该行重写为:

float a = 0x12.2 //or float a = 0x12.2F or double a = 0x12.2D

报错。

为什么小数点后加数字会报错?

为什么这行代码是错的:

float a = 0x12.2 //or float a = 0x12.2F or double a = 0x12.2D

基本原因是添加此符号是为了精确表示而不是为了方便。预计指数将以 2 为底给出,因为它在浮点值的内部表示中。

Why does it give an error when numbers are added after the decimal point?

它不用于十六进制,因为这些值用于单独使用这样一个点没有用的值。您必须提供指数才能使用此表示法。

例如来自 Double 的来源。

public static final double MAX_VALUE = 0x1.fffffffffffffP+1023; // 1.7976931348623157e+308

public static final double MIN_NORMAL = 0x1.0p-1022; // 2.2250738585072014E-308