`
tntxia
  • 浏览: 1510870 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

二进制和十进制互相转化的程序

阅读更多

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

分享到:
评论

相关推荐

    十进制与浮点数相互转化工具.rar

    这个“十进制与浮点数相互转化工具”可能是基于上述原理编写的一个小程序,它可以方便地在MIPS环境下进行十进制和浮点数的互相转换,这对于编程、调试或理解浮点运算的底层机制非常有用。在使用过程中,用户只需输入...

    ASCII码与十进制十六进制互相转化小工具

    这个"ASCII码与十进制,十六进制互相转化的简易工具"就是这样一种实用的小程序,它可以帮助开发者快速查询和转化这些编码形式。 在实际应用中,例如,当你需要知道某个字符的ASCII码值,你可以输入该字符,工具会...

    基于Java的16进制数与2进制数互相转化方法.docx

    ### 基于Java的16进制数与2进制数互相转化方法 #### 一、十六进制数转二进制数 在提供的代码片段中,展示了一个基于Java的程序来实现从十六进制到二进制的转换。 ##### 1.1 程序结构与功能 - **类定义**:`H_to_...

    C语言 2进制,8进制,10,进制,16进制的相互转换

    经典的c语言的代码程序——进制间的转换,用vc++6.0写的各种进制之间的转换。

    各种进制间转换——c语言

    C语言是一种底层编程语言,它允许程序员直接处理二进制、八进制、十进制和十六进制等不同进制的数值。这篇文档“各种进制转换_c语言.doc”很可能是对如何在C语言中进行进制转换的详细讲解。 首先,我们要理解不同...

    系统分析师之计算机系统知识

    十六进制作为一种简洁的表示方式,常用于编程和内存地址表示,与二进制之间可以方便地互相转换。 透明性是计算机科学中的一个重要概念,意味着低层的机器级细节对高级语言程序员是隐藏的,使得他们可以专注于更高...

    java科学计算器(进制转换).pdf

    Java科学计算器是一款基于Java编程语言开发的计算器应用,它不仅具备基本的加、减、乘、除四则运算功能,还支持数的进制转换,包括二进制、八进制和十进制之间的互相转换。此外,该计算器还包含了基本的数学函数,如...

    2022年单片微型计算机概述end.ppt

    二进制数的运算规则简单,乘法和除法可以转化为位移操作。十六进制作为一种常见的二进制缩写形式,方便了数字的书写和转换。不同进制间的转换是编程和数据分析的基础,例如,二进制转换为十进制可以通过按权展开求和...

    Android byte[] 和 String互相转换

    这是因为`byte[]`适合处理二进制数据,如图片、音频文件等,而`String`则更适合存储文本信息。本篇将详细介绍如何在Android中实现这两种数据类型的互转。 ### 一、`byte[]` 转 `String` 在Java和Android中,将字节...

    单片机原理与应用 第2版 教学PPT 作者 曹克澄 单片机原理与应用习题答案.doc

    在数值转换方面,书中介绍了如何将十进制数、二进制数和十六进制数互相转换,以及BCD码(二进制编码的十进制数)的表示。例如,十进制数可以通过移位和加法运算转化为二进制数,再通过特定规则转换成十六进制数。BCD...

    计算机二级难吗,看了它.挂科,难!难!难!.pdf

    * 将十进制转化为二进制时除以2取余 * 二进制转化为八进制时以三位为一组 * 二进制转化为十六进制时以四位为一组 五、字符的编码 * 普遍采用ASCII码(美国标准信息交换码) * 被国际标准化组织ISO采纳,作用通用...

    2022年江西专升本计算机应用基础试题知识点.doc

    * 将十进制转化为二进制时除二取佘 * 二进制转化为八进制时以三位为一组,三位的权重等于八进进中的一位权重 * 二进制转化为十六进制时以四位为一组 四、字符编码 * 普遍采用的是 ASCII 码,中文含义为美国标准...

    大学一级计算机应用基础知识点汇总(良心出品必属精品).doc

    4. 二进制换算法则:将十进制转化为二进制时除二取余;二进制转化为八进制时以三位为一组,三位的权重等于八进进中的一位权重,二进制转化为十六进制时以四位为一组。 5. 字符编码:普遍采用的是 ASCII 码,中文...

    电大统考计算机应用基础试题知识点.doc

    * 将十进制转化为二进制时除二取余 * 二进制转化为八进制时以三位为一组,三位的权重等于八进进中的一位权重 * 二进制转化为十六进制时以四位为一组 五、字符编码 * 普遍采用 ASCII 码,中文含义为美国标准信息...

    大学生计算机基础知识必备.pdf

    * 将十进制转化为二进制时除二取余 * 二进制转化为八进制时以三位为一组,三位的权重等于八进进中的一位权重 * 二进制转化为十六进制时以四位为一组 五、字符编码 * 普遍采用的是ASCII码,中文含义为美国标准信息...

    计算机一级考试复习资料.doc

    将十进制转化为二进制时除二取余;二进制转化为八进制时以三位为一组,三位的权重等于八进进中的一位权重,二进制转化为十六进制时以四位为一组。 五、字符的编码 对于字符的编码,普遍采用的是ASCII码,中文含义...

    大学计算机基础期末考试试题.doc

    * 将十进制转化为二进制时除二取佘 * 二进制转化为八进制时以三位为一组,三位的权重等于八进进中的一位权重 * 二进制转化为十六进制时以四位为一组 五、字符编码 * 普遍采用 ASCII 码 *アメリカ标准信息交换码 * ...

    事业编计算机基础知识试题.pdf

    * 将十进制转化为二进制时除二取余 * 二进制转化为八进制时以三位为一组,三位的权重等于八进制中的一位权重 * 二进制转化为十六进制时以四位为一组 五、字符的编码 * 普遍采用ASCII码,中文含义为美国标准信息...

Global site tag (gtag.js) - Google Analytics