Cao Yi

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

返回目录

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

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

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

改成如下的就可以了:

上面不是规范的科学计数法表示了,只是为了通过编译,加以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转移而来。