给定一个介于0和1之间的实数,(如0.625),类型为double,打印它的二进制表示(0.101);如果该数字无法精确地用32位以内的二进制表示,则打印“ERROR”。
import java.util.Scanner;
public class LianXi {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
double num = in.nextDouble();
//创建一个初始字符串,将判断后的结果不断添加
StringBuilder t = new StringBuilder("0.");
while(num>0){
//乘2,挪整
double a = num * 2;
if(a>=1){
//乘2后大于1,添1
t.append("1");
//消掉整数部分,留下小数部分继续乘2
num = a - 1;
}
else{
//乘2后小于1,添0
t.append("0");
num = a;
}
}
//判断小数位的位数是否为32,因为“0.”算两位,所以位数加2
if(t.length()>34){
System.out.println("ERROR");
}
else{
System.out.println(t.toString());
}
}
}