我想使用十六进制表示法直接初始化double
。我知道这适用于int
和Long
,如以下示例所示(结果值始终正确):
int i = 0x10000000; // 268435456
Long li = 0x1000000000000000L; // 1152921504606846976
另一方面,如果我尝试对双打执行相同的操作,它可以工作,但只能在4个字节的范围内(在代码示例中查看注释)。对于第二个,无效的表示法,Netbeans IDE一直告诉我这是一个整数值,因此太大了:
double d1 = 0x10000000; // 2.68435456E8
double d2 = 0x1000000000000000; // not valid
float
- 值的工作原理以及它们在4个字节的范围内:
float f1 = 0x10000000; // 2.68435456E8
Long
,表示此符号中没有“L”(与浮点数或“f”相反)标记双打无效“。”? double
而不适用于Long
? 感谢您的建议和建议。
答案 0 :(得分:2)
Java支持自1.5以来的浮点十六进制文字
double d = 0x1f.1p1;
答案 1 :(得分:1)
如果您只想使用长范围内的整数值初始化double,请使用:
double d2 = 0x1000000000000000L;
您还可以使用BigInteger提供远程范围之外的整数十六进制值:
double d3 = new BigInteger("123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0", 16).doubleValue();
如果需要提供十六进制分数,请按照上一个答案中的建议使用十六进制浮点字面值:
double d = 0x1F.1p1;