给定一个介于0和1之间的实数(0.625),类型为double,打印它的二进制表示。如果该数字无法精准地用32位以内的二进制表示,则打印“ERROR”
先上代码:
public class printbinary {
public static void main(String[] args) {
printBinary(0.625);
}
public static String printBinary(double num) {
if(num>=1||num<=0)
return "ERROR";
//不清楚StringBuffer,StringBuilder的小伙伴要去搜一下
StringBuilder binary=new StringBuilder();
binary.append(".");
while(num>0){
if(binary.length()>=32)
return "ERROR";
double r=num*2;
if(r>=1){
binary.append("1");
num=r-1;
}else{
binary.append("0");
num=r;
}
}
return binary.toString();
}
}
这是一个大家能够明白的写法,不太明白的小伙伴可能是不太清楚小数的二进制表示,大家看完这两篇应该应该不难理解:
https://jingyan.baidu.com/article/425e69e6e93ca9be15fc1626.html
https://jingyan.baidu.com/article/eb9f7b6dc692e9c79264e878.html
简单来说就是每次先乘2,判断是不是大于1,大于1取整数部分,留下小数,继续乘2,直到小数部分为零,如果小于1,取整数部分0,继续乘2,直到小数部分为0
然最后按照顺序和格式写成0.xxx的形式
下面这张图解释为什么我们会使用StringBuffer和StringBuilder,因为是可变类,便于字符串的相关操作