为什么Java中的十六进制实数需要指数

AMD*_*AMD 7 java double hex decimal

例如,在Java中,这是十六进制数0x10.

0x10.2P2 是一个正确的十六进制双.

但为什么0x1f.2不正确呢?为什么我们不能使用它,虽然0x1f.2P1应该给出相同的结果,但它有效吗?

Eri*_*rom 7

好吧,如果你的意思是为什么,我们将不得不希望其中一个负责语法的人会加入.它看起来好像使指数可选不会伤害解析文字的能力,但我没有'我仔细考虑了一下.我能提供的只是Java语言规范§3.10.2要求它:

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


vie*_*tti 3

在之前的 Stack Overflow 问题中,有一些“为什么”的衡量标准:

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

和这里:

常量声明中的 P

@NPE 的这个“最佳答案”给出了一个理由:

乍一看,0x 前缀似乎足以识别十六进制浮点文字,那么为什么 Java 设计者选择将字母从 e 更改为 p?这与 e 是有效的十六进制数字有关,因此保留它会导致解析歧义。考虑:

0x1e+2

这是一个十六进制双精度数还是两个整数 0x1e 和 2 的和?当我们将 e 改为 p 时,歧义就解决了:

0x1p+2