十进制数转二进制数,跟据不同的开发语言其转换方式有很多,在Java中如果相把一个十进制的整数来转换成二进制那是举手之劳,非常简单,只要用Integer.toBinaryString(int)方法就可以得到结果。但如果转换的不是一个整数,而是一个带小数部分的十进制数,那就没有那么容易了。由于整数和小数的转换方式不同,所以先将十进制数的整数部分和小数部分分别转换后,再合并转换后的结果即得到想要的结果。

十进制数转二进制数的算法如下:
        1. 十进制整数转换为二进制整数 
        十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
        2.十进制小数转换为二进制小数 
         十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。

下面就给出根据十进制数转二进制数的算法所写的一段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

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhenyu33154/archive/2008/11/16/3312079.aspx

java十进制转换成二进制相关推荐

  1. C语言十进制转换成二进制源码

    把开发过程比较重要的一些内容备份一次,下边资料是关于C语言十进制转换成二进制的内容,应该对各位朋友有一些用. #include int main() { int num; std::cout < ...

  2. 十进制转换成二进制 (栈)

    十进制转换成二进制 (栈) 首先,转化的思路是 辗转取余法.比如说n = 5,先取模(5%2)获得1,然后取余并将其赋值给本身,得到n = 2:再取模得到0,取余之后n = 1:对1取模(1%2)得到 ...

  3. 十进制转换成二进制——C语言

    利用数组和调用函数编写一个十进制转换成二进制的程序 #include "stdio.h" int main(){int i = 0, n , a[32];printf(" ...

  4. 【JavaScript实现十进制转换成二进制】

    [JavaScript实现十进制转换成二进制] 什么是二进制 二进制是计算技术中广泛采用的一种数制.二进制数据是用0和1两个数码来表示的数.它的基数为2,进位规则是"逢二进一",借 ...

  5. C语言 十进制转换成二进制

    /*十进制转换成二进制*/#include<stdio.h>int main(int argc,char argv[]){int num,i;scanf("%d",&a ...

  6. C语言十进制转换成二进制、八进制、十六进制

    一.绪论 十六进制(Hexadecimal):在数学中是一种逢16进1的进位制.一般用数字0到9和字母A到F(或a~f)表示,其中:A~F表示10~15. 十进制(Decimal System):每相 ...

  7. 算法设计-利用栈把十进制转换成二进制

    十进制转换成二进制 void conversion(){ InitStack(S); scanf("%d",n); while(N){ Push(S,n%2) n=n/2; } w ...

  8. 十进制转换成二进制和十六进制的方法

    十进制转换成二进制和十六进制的方法 十进制数转换成二进制数-般分为两个步骤,即整数部分的转换和小数部分的转换. (1 )整数部分的转换 *除2取余法:*这种方法是由于D10=N2 =dn-1x2n-1 ...

  9. c语言十进制转换成二进制八进制十六进制,十进制数转换成二进制,八进制,十六进制(c语言)...

    利用一个函数实现十进制数转换成二进制,八进制,十六进制.利用的是栈的后进先出的思想.算法简单. #include #include #include #define STACK_INIT_SIZE 1 ...

最新文章

  1. springboot+druid+mybatis-Plus 配置详解
  2. 使用CInternetSession和CHttpFile提取网页源码
  3. Java高阶部分知识点汇总(二)-封装与隐藏详讲
  4. mysql.cnf utf8_mysql通过my.cnf修改默认字符集为utf-8的方法和注意事项
  5. CUDA 编程上手指南:CUDA C 编程及 GPU 基本知识
  6. 设计模式-策略模式和工厂模式结合使用
  7. 采用curl库在PHP程序之间传递数组
  8. Java中的自增操作符与中间缓存变量机制
  9. MVVM(Knockout.js)的新尝试:多个Page,一个ViewModel
  10. Spring4.0编程式定时任务配置
  11. hdu_5894_hannnnah_j’s Biological Test(打表找规律)
  12. JIRA重启服务器后需要重启TOMCAT的解决
  13. watson机器人_使您的聊天机器人看起来更加智能! Watson Assistant的隐藏功能。
  14. 仓库管理无纸化,WMS仓库管理软件+条形码技术
  15. IntelliJ IDEA2017.3 破解
  16. 加拿大布鲁克大学计算机科学,布鲁克大学(Brock University)
  17. Linux内核移植 part3:Exynos4412 Linux Kernel移植
  18. node 暴漏模块中的api(转自了不起的node)
  19. sim7600ce 拨号上网测试_SIM7600CE应用程序调试流程
  20. Web版2048游戏制作

热门文章

  1. Expert C Programming 阅读笔记(CH2)
  2. 极客时间_week03_work
  3. 个人网站必备的 10 个开源后台管理UI库
  4. 程序员除了代码还应该有什么
  5. STM8L051之通过ADC1与DMA读取内部参考电压,求取VDD电源电压---库函数版
  6. 使用 LaTeX 的笔记
  7. 带选择头像的用户注册页面
  8. 如何批量导入不同文件夹中的图片
  9. express跨域配置
  10. 前2周还很火的ChatGPT,怎么突然就哑火了?