用二进制表示0-1之间的实数
package _1_Bit_Operation; /** * @Auther: YuanJun * @Date: 2021/12/14 - 12 - 14 - 16:50 * @Description: _1_Bit_Operation */ //给定一个区间0-1之间的实数,(如0.625),类型为double //打印它的二进制表示 0.101 //如果无法精准的用32位以内的二进制表示,则打印“ERROR” import java.util.Scanner; /** * 0.625 * 第一: 先 0.625*2 = 1.25 > 1 (如果 x * 2 > 1 ,那么得到一位二进制数1, 否则为0,直到 x' * 2 = 1 ,得到最后一位二进制数,否则不能表示) * 得到第一位二进制数 0.1 * 然后1.25 - 1 = 0.25 * 0.25*2 = 0.5 < 1 * 得到第二位二进制数 0.10 * 然后0.5*2 = 1 = 1 * 得到第三位二进制数 0.101 * 1-1 = 0 ,结束 */ public class test9 { //这是一个main方法,是程序的入口: public static void main(String[] args) { Scanner input = new Scanner(System.in) ; System.out.println("请输入0-1之间的小数:"); double a = input.nextDouble(); double b = a; StringBuffer str = new StringBuffer("0."); while(a != 0) { if ((a * 2) >= 1) { str.append("1"); a = a * 2 - 1; } else{ a = a*2; str.append("0"); } } if(str.length() >34){ System.out.println("ERROR:"+ b +"不能用二进制精确表示"); } else{ System.out.println(str); } } }