Java 双精度到基数2的转换(有简单的方法吗?)

Java 双精度到基数2的转换(有简单的方法吗?),java,double,base-conversion,Java,Double,Base Conversion,你好,谢谢你的帮助 (使用Java) 我已经研究了一些将Double转换为base 2(仍然是Double)的方法,但是我找不到一个简单的方法。我读到了Double是如何编码的,Double.doubletrawlongbits()等方法可以给出基数2,但有不同的解释 要转换int,使用以下方法非常简单: 整数.toString(x,2) 我想知道是否有人知道一种简单的方法,可以将一个Double转换成它的base 2对应的Double?如果转换后我有一个Double=0.25,我希望看到Dou

你好,谢谢你的帮助

(使用Java) 我已经研究了一些将Double转换为base 2(仍然是Double)的方法,但是我找不到一个简单的方法。我读到了Double是如何编码的,Double.doubletrawlongbits()等方法可以给出基数2,但有不同的解释

要转换int,使用以下方法非常简单: 整数.toString(x,2)

我想知道是否有人知道一种简单的方法,可以将一个Double转换成它的base 2对应的Double?如果转换后我有一个Double=0.25,我希望看到Double=0.01


谢谢

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

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

长尾数=val&(1L您可以像这样提取
double
的部分

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

长尾数=val&(1L一种跨平台解决方案,不依赖于双精度
的二进制表示:

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++;
}
字符串结果=”;
如果(x<0){result=“-”,x=-x;}
结果+=整数.toString((int)x,2);
双分形=x-(int)x;
整数位数=0;
而(分形>0&&位数<最大位数){
如果(数字==0)结果+=”;
frac*=2;//现在0
一种跨平台的解决方案,它不依赖于双精度
的二进制表示:

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++;
}
字符串结果=”;
如果(x<0){result=“-”,x=-x;}
结果+=整数.toString((int)x,2);
双分形=x-(int)x;
整数位数=0;
而(分形>0&&位数<最大位数){
如果(数字==0)结果+=”;
frac*=2;//现在0
doubletoRawLongBits
当然是一种方法。
doubletoRawLongBits
当然是一种方法。