Java中的小数可以使用十六进制

支持十六进制小数是从JDK 5开始的一个特性。但它对定义有比较多的限制:

必须以0X或者0x开头

必须以PN或者pN结束。p或者P相当于十进制小数中使用科学计数法时的e或者E,N是一个十进制数。

假设一个数字定义成double d = 0xa.eP3,它表示的值为 (10 + 14*(16^(-1))) * 2^3,也就是它限定用科学计数法表示,但底数不是16,而是2,这点也要注意。

下面是两个非法的定义方式:

float f = 0x13.a是非法的。

double d = 0x1a.e也是非法的。

改成如下的就可以了:

float f = 0x13.ap0f;

double d = 0x1a.ep0d;

上面不是规范的科学计数法表示了,只是为了通过编译,加以p0在尾部而已。

参考:

我在在JW@TW上的提问

Five Favorite Features from 5.0中的Hexadecimal Floating Point Literals部分。