java十进制转二进制代码怎么解决?

如题所述

第1个回答  2022-11-16

下面是根据十进制数转二进制数的算法所写的一段Java程序示例代码:

import java.math.BigDecimal;

public class Test {

public static void main(String[] args) { 

Test t = new Test(); 

double d = 8; 

String s = t.decimal2BinaryStr(d); 

System.out.println("十进制数"+d+"转成二进制数为:"+s); 

}

/** 

* 十进制数转二进制数 

* @param d 十进制数 

* @return 十进制数转换成二进制的字符串 

*/ 

public String decimal2BinaryStr(double d){ 

String result = decimal2BinaryStr_Inte(d); 

result += decimal2BinaryStr_Deci(d); 

return result; 

/** 

* 十进制整数部分转二进制数 

* @param d 十进制数 

* @return 十进制整数部分转换成二进制的字符串 

*/ 

public String decimal2BinaryStr_Inte(double d){ 

//      return Integer.toBinaryString((int)d); 

/* 

* 本来利用上面的Integer.toBinaryString(int)就可以得到整数部分的二进制结果, 

* 但为了展示十进制转二进制的算法,现选择以下程序来进行转换 

*/ 

String result = ""; 

long inte = (long)d; 

int index = 0; 

while(true){ 

result += inte%2; 

inte = inte/2; 

index++; 

if(index%4 == 0){ 

result+=" "; 

if(inte==0){ 

while(index%4!=0){ 

result+="0"; 

index++; 

break; 

char[] c = result.toCharArray(); 

char[] cc = new char[c.length];  

for(int i=c.length; i>0; i--){ 

cc[cc.length-i] = c[i-1]; 

return new String(cc); 

/** 

* 十进制小数部分转二进制 

* @param d 十进制数 

* @return 十进制小数部分转换成二进制小数的字符串 

*/ 

public String decimal2BinaryStr_Deci(double d){ 

return decimal2BinaryStr_Deci(d, 0); 

/** 

* 十进制小数部分转二进制 

* @param d 十进制数 

* @param scale 小数部分精确的位数 

* @return 十进制小数部分转换成二进制小数的字符串 

*/ 

public String decimal2BinaryStr_Deci(double d, int scale){ 

double deci = sub(d,(long)d); 

if(deci==0){ 

return ""; 

//为了防止程序因所转换的数据转换后的结果是一个无限循环的二进制小数,因此给其一个默认的精确度 

if(scale==0){ 

scale = (String.valueOf(deci).length()-2)*4; 

int index = 0; 

StringBuilder inteStr = new StringBuilder(); 

double tempD = 0.d; 

while(true){ 

if(deci==0 || index==scale){ 

while(index%4!=0){ 

inteStr.append("0"); 

index++; 

break; 

if(index==0){ 

inteStr.append(".");  

tempD = deci*2; 

inteStr.append((int)tempD); 

deci = sub(tempD ,(int)tempD); 

index++; 

if(index%4 == 0){ 

inteStr.append(" "); 

}  

return inteStr.toString(); 

/** 

* 提供精确的减法运算。 

* @param v1 被减数 

* @param v2 减数 

* @return 两个参数的差 

*/ 

public static double sub(double v1, double v2) { 

BigDecimal b1 = new BigDecimal(Double.toString(v1)); 

BigDecimal b2 = new BigDecimal(Double.toString(v2)); 

return b1.subtract(b2).doubleValue(); 

}

例如将十进制数1234.5转成二进制数为:0100 1101 0010.1000

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网