嗨,谢谢你的帮助,
(使用Java) 我已经看了一下将Double转换为base 2(仍然是双倍),但我找不到一个简单的方法。我读到,考虑到Doubles是如何编码的,Double.doubleToRawLongBits()这样的方法可以给Base 2但是有不同的解释。
对于转换int,使用该方法非常简单: Integer.toString(x,2)
我想知道是否有人知道一种简单的方法将Double转换为它的基数2对应的Double?如果我在转换后有一个Double = 0.25,我希望看到一个double = 0.01。
由于
答案 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++;
}