题目
给定一个 介于0-1之间的实数,类型为 double,打印他的二进制表示,如果该数字无法精确地用32位以内的二进制来表示,则打印 “error”
代码
import java.util.Scanner;
public class Floatpointtobinary {
//浮点数转换成二进制表达
/*思路分析
首先需要明确浮点数是怎么转化成二进制(通过乘二,写一)
利用for循环
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double x = sc.nextDouble();
int c = 32;
int[] arr = new int[32];
for (int i = 0; i < 32; i++) {
if (x > 0) {
x = x * 2;
if (x >= 1) {
arr[i] = 1;
x = x - 1;
}
} else {
c = i;
break;
}
}
if (x != 0) {
System.out.println("ERROR");
} else {
System.out.print("0.");
for (int i = 0; i < c; i++) {
System.out.print(arr[i]);
}
}
}
}
使用StringBuilder简化方法
(注意return的用法,注意与continue区分)
public class StringBuilderFloatpointtobinary {
/*
1. return 的作用是退出循环体所在的函数,相当于结束该方法。
2. break 的作用是结束循环,跳出循环体,执行后面的程序。
3. continue 的作用是结束此次循环,进行下一次循环;
*/
public static void main(String[] args) {
double num=0.3;
StringBuilder sb=new StringBuilder("0.");
while(num>0){
double r=num*2;
if(r>=1){
sb.append("1");
num=r-1;
}else{
sb.append("0");
num=r;
}
if(sb.length()>34){
System.out.println("ERROR");
return;//退出循环体所在函数,这里指的是main函数
}
}
System.out.println(sb.toString());
}
}