在java.lang.Double
中,有如下常量声明:
public static final double MAX_VALUE = 0x1.fffffffffffffP+1023;
public static final double MIN_NORMAL = 0x1.0p-1022;
P
是干什么用的?大小写的区别重要吗?
我知道 L
、D
和 F
用于 Long
s、Double
s 和 Float
s,但之前从未见过 P
。
最佳答案
P
(或p
)表示十六进制floating-point literal ,其中有效数字以十六进制指定。
使用 p
代替 e
。您看到的 d
和 f
后缀与此正交:0x1.0p+2f
和 0x1.0p+ 2d
是有效的文字(一个是 float
类型,另一个是 double
类型)。
乍一看,0x
前缀似乎足以识别十六进制浮点文字,那么为什么 Java 设计人员选择更改 e
中的字母> 到 p
?这与 e
是有效的十六进制数字有关,因此保留它会导致解析歧义。考虑:
0x1e+2
这是一个十六进制 double
还是两个整数 0x1e
和 2
之和?当我们将 e
改为 p
时,歧义就解决了:
0x1p+2
关于java - 常量声明中的 P,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8603232/