Double to base 2转换(有一种简单的方法吗?)

时间:2014-01-01 20:11:16

标签: java double base-conversion

嗨,谢谢你的帮助,

(使用Java) 我已经看了一下将Double转换为base 2(仍然是双倍),但我找不到一个简单的方法。我读到,考虑到Doubles是如何编码的,Double.doubleToRawLongBits()这样的方法可以给Base 2但是有不同的解释。

对于转换int,使用该方法非常简单: Integer.toString(x,2)

我想知道是否有人知道一种简单的方法将Double转换为它的基数2对应的Double?如果我在转换后有一个Double = 0.25,我希望看到一个double = 0.01。

由于

2 个答案:

答案 0 :(得分:4)

您可以像这样提取double的部分内容。

long val = Double.doubleToRawLongBits(d);
int sign = (int) (val >>> 63);
int exp = (int) ((val >>> 52) & 2047);
long mantissa = val & ((1L << 52) - 1);

之后,你可以用Long.toString(mantissa, 2)打印尾数,然后按照你喜欢的方式打印指数和符号。这假定为正常数字。

答案 1 :(得分:0)

不依赖于double的二进制表示的跨平台解决方案:

String result = "";
if (x < 0) { result = "-"; x = -x; }
result += Integer.toString((int)x, 2);
double frac = x - (int)x;
int digits = 0;
while (frac > 0 && digits < MAX_DIGITS) {
  if (digits == 0) result += ".";
  frac *= 2; // now 0 < frac < 2
  result += Integer.toString((int)frac, 2); // it's 0 or 1
  frac = frac - (int)frac;
  digits++;
}