0~1间浮点实数的二进制表示
题5:0~1间浮点实数的二进制表示
给定一个介于0~1间的浮点实数,(如:0.625),类型为double,
打印它的二进制表示(0.101)
因为小数点后的二进制分别为(0.5,0.25,0.125……)。
如果该数无法精准地用32位表示,则打印”ERROR”
public class Myclass {
/*
* 题5:0~1间浮点实数的二进制表示
* 给定一个介于0~1间的浮点实数,(如:0.625),类型为double,
* 打印它的二进制表示(0.101)
* 因为小数点后的二进制分别为(0.5,0.25,0.125……)。
* 如果该数无法精准地用32位表示,则打印”ERROR”
*/
public static void main(String[] args) {
double num = 0.625;
//创建一个StringBuilder对象,引用存储二进制字符串
//了解StringBuilder相关,传送门链接:https://blog.csdn.net/OutsideSystem/article/details/104148120
StringBuilder sb = new StringBuilder("0.");
while(num > 0){
double tmp = num * 2;
if(tmp >= 1){
sb.append('1');
num = tmp - 1;
}
else{
sb.append('0');
num = tmp;
}
if(sb.length() > 34){ //判定是否超出限定长度
System.out.println("ERROR");
break;
}
}
System.out.println(sb);
}
}
输出结果
0.101