⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 decimal.java

📁 Java写的一个能在二进制
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	private String Decimal_To_Hexadecimal(String De){
		return Binary_To_Hexadecimal(Decimal_To_Binary(De));
	}

	private String Decimal_To_Octal(String De){
		return Binary_To_Octal(Decimal_To_Binary(De));
	}

	private String Decimal_To_Binary(String De){
		int k=De.length();//小数点位置
		int onlyOne=0;
		StringBuffer result=new StringBuffer();
		if(De.isEmpty())	return "";
		for(int i=0;i<De.length();i++)
			if(De.charAt(i)=='.'){
				k=i;
				onlyOne++;
				if(onlyOne>1)	return "小数点太多了!";
			}

		int integer=0;
		double fraction=0;
		//将整数部分由String转为int
		for(int i=0;i<k;i++)
			integer = 10*integer+(De.charAt(i)-48);

		//将integer转成2进制
		while(integer!=0){
			if(integer%2==1)	result.insert(0,'1');
			else	result.insert(0,'0');
			integer/=2;
		}
		if(k!=De.length())	result.append('.');//如果有小数部分,加上小数点

		//如果开始处只有小数点,在前面加一个0
		if(result.charAt(0)=='.')	result.insert(0,'0');

		//将小数部分由String转为Double
		for(int i=De.length()-1;i>=k+1;i--)
			fraction =  fraction/10+(De.charAt(i)-48);
		fraction/=10;

		//将fraction转成2进制
		int count=0;
		while(count<=8 && Math.abs(fraction)>0.001){
			fraction*=2;
			if(fraction>=1){
				result.append('1');
				fraction--;
			}
			else result.append('0');
			count++;
		}
		return result.toString();
	}

	private String Hexadecimal_To_Binary(String Hex){
		int onlyOne=0;
		String result="";
		for(int i=0;i<Hex.length();i++)
			if(Hex.charAt(i)=='.'){
				 onlyOne++;
				 if(onlyOne>1)	return "小数点太多了!";
			}
		for(int i=0;i<Hex.length();i++){
			result+=Hex_To_Bi_Code(Hex.charAt(i));
		}
		return result;
	}

	private String Octal_To_Binary(String Octal){
		int onlyOne=0;
		String result="";
		for(int i=0;i<Octal.length();i++)
			if(Octal.charAt(i)=='.'){
				 onlyOne++;
				 if(onlyOne>1)	return "小数点太多了!";
			}
		for(int i=0;i<Octal.length();i++){
			result+=Oct_To_Bi_Code(Octal.charAt(i));
		}
		return result;
	}

	private String Binary_To_Decimal(String Bi){
		int k=Bi.length();//记录小数点位置
		int onlyOne=0;
		double result=0;//记录转换后的十进制数
		for(int i=0;i<Bi.length();i++)
			if(Bi.charAt(i)=='.'){//查找小数点位置
				 k=i;
				 onlyOne++;
				 if(onlyOne>1)	return "小数点太多了!";
			}

		for(int i=0;i<k;i++)
			result+=Math.pow(2,k-i-1)*(Bi.charAt(i)-48);
		if(k<Bi.length()){//说明输入数据含有小数点
			for(int i=k+1;i<Bi.length();i++)
				result+=Math.pow(2,k-i)*(Bi.charAt(i)-48);
		}
		//将result转换成字符串格式
		return Double.toString(result);
	}

	private String Binary_To_Octal(String Bi){
		StringBuffer std = new StringBuffer(Bi);//标准串
		String result="";//返回结果串
		int k=-1;
		int onlyOne=0;
		//将Bi转成标准串
		for(int i=0;i<Bi.length();i++)
			if(Bi.charAt(i)=='.'){
				k=i;//查找小数点位置
				//如果找到两个以上小数点,显示出错
				onlyOne++;
				if(onlyOne>1)	return "小数点太多了!";
		}
		if(k==-1){//没有小数点
			if(Bi.length()%3!=0)//Bi.length()%3==0时高位处不需补零
	  		for(int i=0;i<3-Bi.length()%3;i++)
	  			std.insert(0,'0');//高位处补零
		}
	  	else if(k==0){//小数点在首位
	  		for(int i=0;i<3;i++)
	  			std.insert(0,'0');//高位处补3个零
	  		for(int i=0;i<3-(Bi.length()-k-1)%3;i++)
	  			std.append('0');//低位处补零
	  	}
	  	else{
	  		for(int i=0;i<3-k%3;i++)
	  			std.insert(0,'0');//高位处补零
	  		for(int i=0;i<3-(Bi.length()-k-1)%3;i++)
	  			std.append('0');//低位处补零
	  	}

	  	int stdPoint;//记录小数点在std中位置
	  	stdPoint = std.indexOf(".");//查找小数点在std中位置

		if(stdPoint==-1)	stdPoint=std.length();//没有小数点
		for(int i=0;i<stdPoint;i+=3)
			result+= Bi_TO_Oct_Code(std.substring(i,i+3));

		if(stdPoint!=std.length()){//有小数点
			result+=".";
			for(int i=stdPoint+1;i<std.length();i+=3)
				result+= Bi_TO_Oct_Code(std.substring(i,i+3));
		}

		return result;
	}

	private String Binary_To_Hexadecimal(String Bi){
		StringBuffer std = new StringBuffer(Bi);//标准串
		String result="";//返回结果串
		int k=-1;
		int onlyOne=0;
		//将Bi转成标准串
		for(int i=0;i<Bi.length();i++)
			if(Bi.charAt(i)=='.'){
				k=i;//查找小数点位置
				//如果找到两个以上小数点,显示出错
				onlyOne++;
				if(onlyOne>1)	return "小数点太多了!";

		}

		if(k==-1){//没有小数点
			if(Bi.length()%4!=0)//Bi.length()%4==0时高位处不需补零
	  		for(int i=0;i<4-Bi.length()%4;i++)
	  			std.insert(0,'0');//高位处补零
		}
	  	else if(k==0){//小数点在首位
	  		for(int i=0;i<4;i++)
	  			std.insert(0,'0');//高位处补4个零
	  	//	if((Bi.length()-k-1)%4!=0)//Bi.length()-k-1)%4=0时低位处不需补零
	  		for(int i=0;i<4-(Bi.length()-k-1)%4;i++)
	  			std.append('0');//低位处补零
	  	}
	  	else{
	  		if(k%4!=0)//k%4==0时高位处不需补零
	  		for(int i=0;i<4-k%4;i++)
	  			std.insert(0,'0');//高位处补零
	  	//	if((Bi.length()-k-1)%4!=0)//Bi.length()-k-1)%4=0时低位处不需补零
	  		for(int i=0;i<4-(Bi.length()-k-1)%4;i++)
	  			std.append('0');//低位处补零
	  	}


	  	int stdPoint;//记录小数点在std中位置
	  	stdPoint = std.indexOf(".");//查找小数点在std中位置

		if(stdPoint==-1)	stdPoint=std.length();//没有小数点
		for(int i=0;i<stdPoint;i+=4)
			result+= Bi_TO_Hex_Code(std.substring(i,i+4));
		/**
		 *subString(startIndex,endIndex)分出的是sdt[startIndex]到std[endIndex-1]
		 *之间的字符
		 */

		if(stdPoint!=std.length()){//有小数点
			result+=".";
			for(int i=stdPoint+1;i<std.length();i+=4)
				result+= Bi_TO_Hex_Code(std.substring(i,i+4));
		}

		return result;
	}

	private String Bi_TO_Hex_Code(String sub){
		String Hex="";//为什么不能用switch呢
		//为什么这样写不行呢
	/*	if(sub=="0000")	Hex="0";
		else if(sub=="0001")	Hex="1";
		else if(sub=="0010")	Hex="2";
		else if(sub=="0011")	Hex="3";
		else if(sub=="0100")	Hex="4";
		else if(sub=="0101")	Hex="5";
		else if(sub=="0110")	Hex="6";
		else if(sub=="0111")	Hex="7";
		else if(sub=="1000")	Hex="8";
		else if(sub=="1001")	Hex="9";
		else if(sub=="1010")	Hex="A";
		else if(sub=="1011")	Hex="B";
		else if(sub=="1100")	Hex="C";
		else if(sub=="1101")	Hex="D";
		else if(sub=="1110")	Hex="E";
		else if(sub=="1111")	Hex="F";*/
		if(sub.compareTo("0000")==0)	Hex="0";
		else if(sub.compareTo("0001")==0)	Hex="1";
		else if(sub.compareTo("0010")==0)	Hex="2";
		else if(sub.compareTo("0011")==0)	Hex="3";
		else if(sub.compareTo("0100")==0)	Hex="4";
		else if(sub.compareTo("0101")==0)	Hex="5";
		else if(sub.compareTo("0110")==0)	Hex="6";
		else if(sub.compareTo("0111")==0)	Hex="7";
		else if(sub.compareTo("1000")==0)	Hex="8";
		else if(sub.compareTo("1001")==0)	Hex="9";
		else if(sub.compareTo("1010")==0)	Hex="A";
		else if(sub.compareTo("1011")==0)	Hex="B";
		else if(sub.compareTo("1100")==0)	Hex="C";
		else if(sub.compareTo("1101")==0)	Hex="D";
		else if(sub.compareTo("1110")==0)	Hex="E";
		else if(sub.compareTo("1111")==0)	Hex="F";

		return Hex;
	}

	private String Bi_TO_Oct_Code(String sub){
		String Oct = "";
		if(sub.compareTo("000")==0)	Oct="0";
		else if(sub.compareTo("001")==0)	Oct="1";
		else if(sub.compareTo("010")==0)	Oct="2";
		else if(sub.compareTo("011")==0)	Oct="3";
		else if(sub.compareTo("100")==0)	Oct="4";
		else if(sub.compareTo("101")==0)	Oct="5";
		else if(sub.compareTo("110")==0)	Oct="6";
		else if(sub.compareTo("111")==0)	Oct="7";

		return Oct;
	}

	private String Oct_To_Bi_Code(char sub){
		String Bi = "";
		if(sub=='0')	Bi="000";
		else if(sub=='1')	Bi="001";
		else if(sub=='2')	Bi="010";
		else if(sub=='3')	Bi="011";
		else if(sub=='4')	Bi="100";
		else if(sub=='5')	Bi="101";
		else if(sub=='6')	Bi="110";
		else if(sub=='7')	Bi="111";
		else if(sub=='.')	Bi=".";
		return Bi;
	}

	private String Hex_To_Bi_Code(char sub){
		String Bi = "";
		if(sub=='0')	Bi="0000";
		else if(sub=='1')	Bi="0001";
		else if(sub=='2')	Bi="0010";
		else if(sub=='3')	Bi="0011";
		else if(sub=='4')	Bi="0100";
		else if(sub=='5')	Bi="0101";
		else if(sub=='6')	Bi="0110";
		else if(sub=='7')	Bi="0111";
		else if(sub=='8')	Bi="1000";
		else if(sub=='9')	Bi="1001";
		else if(sub=='a')	Bi="1010";
		else if(sub=='b')	Bi="1011";
		else if(sub=='c')	Bi="1100";
		else if(sub=='d')	Bi="1101";
		else if(sub=='e')	Bi="1110";
		else if(sub=='f')	Bi="1111";
		else if(sub=='.')	Bi=".";
		return Bi;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -