支持十六进制小数是从JDK 5开始的一个特性。但它对定义有比较多的限制:
0X
或者0x
开头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
在尾部而已。
Code:
public class What022 {
public static void main(String[] args) {
double x = 0Xap0; // 10 * 2^0 = 10.0
double y = 0XfP2D; // 15 * 2^2 = 60.0
float z = 0Xf.aP1F; // (15 + 10/16ths) * 2^1 = 31.25f
// Print in decimal
System.out.printf("%f %f %f%n", x, y, z);
// Print in hex
System.out.printf("%a %a %a%n", x, y, z);
}
}
/*
* output
* 10.000000 60.000000 31.250000
* 0x1.4p3 0x1.ep5 0x1.f4p4
*
*/
参考:
本文从Google Sites转移而来。