题6:利用二进制表示浮点数
题目描述:
给定一个介于0~1之间的实数,(如0.625),类型位double ,输出二进制的表示形式0.101 因为小数点后的二进制分别表示0.5,0.25,0.125......,如果该数字无法精准地用32以内二进制表示,则打印error.
解题方法: 乘2挪整法
方法实现步骤:
1.创建一个StringBuilder对象初始化位 “0.”(两个字符),用于后面追加小数位。
2.创建一个while循环,判断n是否大于0,如果小于或等于0则退出循环
3.当n大于0的时候,给n乘以2,然后判断是否大于1:
4.如果大于等于1,说明该二进制位为1,在后面追加1,并且消除整数部分,也就是将n-1,变成小数
5.如果小于1 ,说明该二进制位为0 ,在后面追加0,并且n保持不变
6.判断StringBuildre对象的长度是否超过32+(2个字符)——34位,超过则输出error,并且退出循环
7.打印StringBuilder对象。输出结果
关键代码:
public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("请输入一个double类型的浮点实数:"); double N = input.nextDouble(); double n = 0.0; // 方法:乘二挪整 StringBuilder builder = new StringBuilder("0."); while (N > 0) { // 乘以2 n = N * 2; // 判断是否大于1 if (n >= 1) { builder.append("1"); // 消除整数部分 N = n - 1; } else { builder.append("0"); N = n; } if (builder.length() > 34) { System.out.println("ERROR"); return; } } System.out.println(builder.toString()); }