import java.util.Scanner;
import java.math.BigDecimal;
public class Test2
{
public static void main(String[] args)
{
while(true)
{
System.out.println("请输入一个数:");
Scanner sc=new Scanner(System.in);
double input=sc.nextDouble();
long[] arr=new long[64];
long[] arr1=new long[32];
int x=0,y=0,a,a1;
a1=(int)input;//分离出整数部分,利用强制类型转换。
BigDecimal b;
BigDecimal b1=new BigDecimal(Double.toString(input));
/*BigDecimal(xxx),xxx可以是整型,
可以是数字内容的字符串数据,如BigDecimal("123.123")
但不可以是浮点型数据,需要做类型转换
如Bigdouble.toString就是把double类型做个类型转换吧*/
BigDecimal c=new BigDecimal(a1);
b=b1.subtract(c);//分离出小数部分,
System.out.println("小数十进制整数部分"+a1+",小数十进制小数部分"+b);
double d=b.setScale(5,BigDecimal.ROUND_HALF_UP).doubleValue();
a=a1;
double d1=d;
while(a!=0)
{
arr1[y]=a%2;
y++;
a=a/2;
}
while(d!=0)
{
if(d<1)
{
d=d*2;
}
else
{
d=(d-1)*2;//十进制小数转换为二进制模块
}
arr[x]=(int)d;
x++;
}
if(a1==0&d1==0)
{
System.out.print("0");
}else{
for(int g=y-1;g>=0&&g<y;g--)//这里一定要注意g--要有限制,g至少要>=0;
{
System.out.print(arr1[g]);
if(g==0&&d1!=0)
System.out.print(".");
}
for(int j=0;j<x;j++)
{
if(a1==0&&j==0)
System.out.print("0.");
System.out.print(arr[j]);
}
}
System.out.println();
}
}
}