1、题目
给定一个介于0和1之间的实数, (如0.625) ,类型为double,打印它的二进制表示(0.101,因为小数点后的二进制分别表示0.5,0.25.0.12…) 。
如果该数字无法精确地用32位以内的二进制表示,则打印“ERROR”。
2、知识点
①、java中stringBuilder的用法.
②、二进制小数转十进制
0.625 * 2 = 1.25 => 0.1
(1.25 - 1) * 2 = 0.5 => 0.10
0.5 * 2 = 1.0 => 0.101
(1.0 - 1) * 2 = 0.0 结束计算
3、代码
package lanqiao;
import java.util.Scanner;
public class test0107 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double num = sc.nextDouble();
StringBuilder binary = new StringBuilder("0.");
// int count = 0; //测试计数
while(num > 0){
double t = num * 2;
//count ++; //测试计数
if(t >= 1){
binary.append("1");
num = t - 1;
}
else{
binary.append("0");
num = t;
}
}
//System.out.println(count); //测试计数
if(binary.length()>34){
System.out.println("ERROR");
}
else{
System.out.println(binary);
}
}
}