class Demo_skill1
{
private double num;
public void ToBin(double num)
{
StringBuffer str = new StringBuffer();
if(num > 0)//这里考虑小数
{
int Inf = (int)num;//提取整数部分
BigDecimal ss = new BigDecimal(num);//声明并创建一个大数字类型对象ss
BigDecimal tt = new BigDecimal(Inf);//声明并创建一个大数字类型对象tt
ss = ss.subtract(tt);//提取小数部分
if(Inf==0) str.append('0');
while(Inf > 0)//整数部分转化为二进制
{
str.append(Inf%2);
Inf/=2;
}
str.reverse();
ss = ss.setScale(10,BigDecimal.ROUND_HALF_UP);//取10位精度
double xx = ss.doubleValue();//转换为double类型
if(xx > 0)//小数部分转化为二进制
{
str.append('.');
double flag = 0.0001;
int kk = 10;//考虑无限循环的问题
while(flag!=0&&kk!=0)
{
xx = xx*2;
int rr = (int)xx;
str.append(rr);
BigDecimal yy = new BigDecimal(xx);
BigDecimal zz = new BigDecimal(rr);
yy = yy.subtract(zz);
yy = yy.setScale(10,BigDecimal.ROUND_HALF_UP);//取10位精度
flag = yy.doubleValue();
xx = yy.doubleValue();
kk--;
}
}
System.out.println(str);
}
}
}
public class skill1 {
public static void main(String[] args) {
Demo_skill1 test = new Demo_skill1();
test.ToBin(1.011125);
}