十进制小数转换二进制算法 请问高手,像十进制小数0.6要转换成二进制,要怎么处理它的无限循环,请用Java写出算法,十进制小数转换成二进制时可能还有其他特殊情况。请一并考虑在内。谢谢!谢绝灌水者。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 import java.math.BigDecimal;public class Test { public static void main(String[] args) { Test t = new Test(); double d = 8.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(); } 调试是可以过,可是运行就过不了,你用 的是什么IDE? 关于界面变化的小问题,指点一下 两个问题,很浅(关于打印和IDE) 我要如何赚积分下载PDF电子教程呢 一个很简单的jsp的例子,调试程序报出如下错误信息?帮忙看看是怎么了? 请教带输出Servlet中文乱码解决 请高手帮忙啊...一个SQL语句异常 小弟初学JAVA,目标锁定“东软”,想请“东软”的各位朋友给些忠告。 public static string oneresultmd5的问题 寻找Java高手合作! 让我们一起谈谈对于我们软件开发人员而言敬业精神和团队精神有何意义? 关于instanceof的纠结。 swing组件与AWT组件的区别
import java.math.BigDecimal;
public class Test {
public static void main(String[] args) {
Test t = new Test();
double d = 8.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();
}
调试是可以过,可是运行就过不了,你用 的是什么IDE?