# java浮点数转二进制_java 中 二进制串与浮点数的相互转化

/*

* 二进制串"10010111.10010010" 转化为double型

* double型 转化为 二进制串

*

* 例如："1111.11"===>15.75

* 15.75===>"1111.11"

*/

001--->0/2 + 0/(2*2) + 1/(2*2*2)==0.125

//2017.03.15 by 迷糊狐狸

import java.util.Scanner;

public classTest {static Scanner scan = newScanner(System.in);//把整数部分转成double

static intsToInt(String s){if(s.length()==1) return s.charAt(0)-'0';return sToInt(s.substring(0,s.length()-1)) * 2

+ (s.charAt(s.length()-1)-'0');

}//把小数部分转成double

static doublesToDou(String s){if(s.length()==1) return (s.charAt(0)-'0')/2.0;return (s.charAt(0)-'0')/2.0 + sToDou(s.substring(1))/2.0;

}//把输入的字符串分成整数部分s1和小数部分s2

static doublestrToDou(String s){int n = s.indexOf(".");if(n<0){

s+= ".0";

n= s.indexOf(".");

}

String s1= s.substring(0,n);

String s2= s.substring(n+1);return sToInt(s1) +sToDou(s2);

}public static voidmain(String[] args) {

System.out.println("请输入一个二进制串：");

String s=scan.nextLine().trim();

System.out.println(strToDou(s));

}

}

0.125-0 == 0.125, 0.125*2 == 0.25, (int)0.25 == 0;

0.25-0 == 0.25, 0.25*2 == 0.5, (int)0.5 == 0;

0.5-0 == 0.5, 0.5*2 == 1.0, (int)1.0 == 1;

1.0-1 == 0.0结束

0.0625--->  0001。

//2017.03.15 by 迷糊狐狸

importjava.util.Scanner;public classTest {static Scanner scan = newScanner(System.in);//把输入的浮点数分成整数部分和小数部分

staticString douToStr(String s){int n = s.indexOf(".");if(n<0){

s+= ".0";

n= s.indexOf(".");

}

String s1= s.substring(0,n);

String s2= "0" +s.substring(n);

String s3=intToStr(Integer.parseInt(s1));

String s4=dToStr(Double.parseDouble(s2));return (s3.length()==0? 0 : s3) + "." +s4;

}//把整数部分转成二进制

static String intToStr(intn){if(n==0) return "";int a = n % 2;int b = n / 2;return intToStr(b) +a;

}//把小数部分转成二进制

static String dToStr(doubled){if(d-(int)d<0.01) return "" + (int)d;int n = (int)(d * 2);double a = d * 2 -n;return "" + n +dToStr(a);

}public static voidmain(String[] args) {

System.out.println("请输入一个二进制串：");

String s=scan.nextLine().trim();

System.out.println(strToDou(s));

System.out.println("请输入一个浮点数：");

String s2=scan.nextLine().trim();

System.out.println(douToStr(s2));

}

}

• 1
点赞
• 0
收藏
觉得还不错? 一键收藏
• 0
评论
02-13 1558
06-22 9114
11-17 288
03-31

1.余额是钱包充值的虚拟货币，按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载，可以购买VIP、付费专栏及课程。