我正在尝试将 double 转换为十进制数。 例如 double 字 22 和字节为:
[0] 0
[1] 0
[2] 0
[3] 0
[4] 0
[5] 0
[6] 54
[7] 64
现在我尝试再次将这些值转换为 22:
ByteBuffer buffer = ByteBuffer.wrap(data);
long l = buffer.getLong();
long b = Double.doubleToLongBits(l);
但结果完全错误:4.6688606E18
这个号码是多少?请帮忙,我完全困惑了!
根据 IEEE 标准 754 double :
任何存储为 double 的值都需要 64 位,格式如下表所示:
63 符号(0 = 正,1 = 负)
62 至 52 指数,偏差 1023
51 比 0 数字 1.f 的分数 f
现在我应该如何将 double 转换为数字以再次得到 22 ?所有这些答案都是错误的
最佳答案
我不确定您想要执行什么类型的转换(当您说“转换为十进制”时,您想要的输出格式/类是什么?)
但是,读到标题时我的第一个想法是 BigDecimal将是一个有效的表示。因此,第一种方法是执行以下操作:
double d = ...; // your input number
BigDecimal b = new BigDecimal(d);
也就是说,如果您想转换为十进制,那么可能是因为 d
的值存在 float 点/舍入问题,该问题仍然存在于 BigDecimal
表示,因为它是基于 d
构建的。
解决这个问题的最佳方法是从一开始就使用 BigDecimals
,使用它们的 String
构造函数 - 这样就不会出现任何 float 实例 -点舍入。如果出于某种原因这不是一个选项,您可以将 double
转换为字符串,这样可以解决许多浮点舍入问题:
String strRep = Double.toString(d);
BigDecimal b = new BigDecimal(strRep);
关于java - 尝试将 double 转换为小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10849721/