永发信息网

编写一个Java程序,将十进制数(double型)转换为二进制数的字符串

答案:1  悬赏:70  手机版
解决时间 2021-03-19 08:46
编写一个Java程序,将十进制数(double型)转换为二进制数的字符串
最佳答案
double型转二进制字符串涉及到小数部分,没法像Integer那样直接转,底下是一个转换类
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);
    }
    
    public String decimal2BinaryStr(double d){
        String result = decimal2BinaryStr_Inte(d);
        result += decimal2BinaryStr_Deci(d);
        return result;
    }

    
    public String decimal2BinaryStr_Inte(double d){
//      return Integer.toBinaryString((int)d);
        
        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);
    }

    
    public String decimal2BinaryStr_Deci(double d){
        return decimal2BinaryStr_Deci(d, 0);
    }

    
    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();
    }


    
    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();
    }
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
招商银行信用卡9041是什么意思
苹果笔记本玩传奇卡吗能玩吗?想入手一台,不
做空是什么意思?什么原理?
名仕老人头干红多少钱一瓶
汉语口语有和英文里押韵短语Okey-Dokey相似的
3*3国标方管多少钱一根
男女朋友交往多久可以确定关系
现在做足球装备实体店前景怎么样
草龟没有水可以活多久
北京路虎揽胜后保险杠喷漆多少钱?哪里做的专
保定都哪些医院可以划医保卡
《血仍未冷-新义岸》最新txt全集下载
皮肤小麦色的人头发那种颜色比较显白啊
阳光宠物中心地址在哪,我要去那里办事
谁四六级成绩既在网上查了又有用短信查了?一
推荐资讯
老东芝笔记本如何输入~这个符号?急!
大连周一不休息的图书馆
喜马拉雅商贸酒店怎么去啊,有知道地址的么
寻找妈妈的寻人启示作文600字
申请课题 研究类型是应用研究,学科可以是理
有谁用过集成灶的,感觉怎么样
微信重置了二维码,如何找回之前的
私家车一般可以坐几个人?带小孩多带一个可以
PSP3000 6.60版本是否可以直接玩PS游戏 或者
和老婆归元寺罗汉求签 在线等恳请高手解签
泰安的手机卡我在青岛用。 怎么打电话才能便
我的手机没有声音,插耳机时候有声音,拔掉耳
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?