Java中十进制数转二进制数的方法
十进制数转二进制数,跟据不同的开发语言其转换方式有很多,在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
Java中十进制数转二进制数的方法相关推荐
- java 二进制转十进制的算法_java中十进制数转换二进制数
将十进制转换成二进制的算法如下: 1.给定一个数: 2.根据十进制转换二进制的思想:把这个数除以2若为单数则为1,为偶数则为0,直到最后一个数为1为止.所以我们要做的就是用你给定的这个数除以2,如果结 ...
- 傻瓜教学——二进制数转换十进制数,十进制数转换二进制数的方法(方法特简单)
我们大家学过,或者了解过计算机的都知道,在我们计算机中输入的是十进制数,存储的是二进制数,然后输出的又是十进制数. 这个过程无非就是二进制转十进制,十进制转二进制. 那么,这种算法又是怎么规定的呢? ...
- JAVA实现十进制数转二进制数,八进制数,十六进制数
二进制: 将每个余数倒着输出来,怎样实现,s=num%2+s;每次得到的数都进入到等号右边的s中,那么第二个余数就是num%2,加在s的前面,这就是字符串的拼接,切记不能交换两者的位置. 八进制: 同 ...
- 十进制数转换为二进制数以及浮点数存储方法
一.十进制数转换为二进制数 十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并. 1. 十进制整数转换为二进制整数 十进制整数转换为二进 ...
- java实现输入一个任意十进制数转换为二进制数
package com.xingyi.one.firstdemo; import java.util.Scanner; public class FirstDemo { //将任意一 ...
- Java黑皮书课后题第7章:*7.13(随机数选择器)编写一个方法,返回1到54之间的随机数,但不能是传递到实参中的数。指定如下方法头
7.13(随机数选择器)编写一个方法,返回1到54之间的随机数,但不能是传递到实参中的数.指定如下方法头 题目 题目描述 可变长参数列表 破题 代码 运行实例 题目 题目描述 7.13(随机数选择器) ...
- C++ 将十进制数转换为二进制数方法
本文介绍一种将十进制数转换为二进制数的方式. 实现要点: (1)用数组来存储每次对2取余的结果. (2)两次使用for循环,分别进行转换和输出. (3)% 取模运算. #include <ios ...
- 二进制与十进制数互相转换的方法及原理
二进制与十进制数互相转换的方法及原理 有人问我一道十进制数转化为二进制数的题:13.625转化为二进制应该如何表示.让我回忆起十多年前学编程时就搞不懂二进制,不找"不必求甚解"的借 ...
- c语言中十六进制可以直接和十进制运算吗,十进制与十六进制怎么理解?,C语言中十进制数和十六进制数能直接运算吗...
16进制 10进制 00 0 01 1 02 2 .. . 09 9 0A 10 0B 11 0C 12 0D 13 0E 14 0F 15 10 16 1F 31 20 32 将数字符号按序排列成数 ...
最新文章
- 聊聊C语言和指针的本质
- Deep Belief Networks
- MySQL笔记——JDBC入门
- 基于深度卷积神经网络的玉米病害实时识别检测系统
- gdal.Buildvrt和gdal.Warp工具实现TIF影像拼接、矢量裁剪
- 计算机的使用知识,计算机基础知识计算机的使用方法
- 手把手教如何修改运动步数
- 服务器主板支持专用条,AMD专用条又要火了?在H110平台上竟然可以完美使用
- 为了研究而玩:游戏分析的方法
- OpenWrt——进行PPPoE拨号时透过路由器访问光猫的方法
- java base64转字图片、图片转base64字符串
- 阿里云个人站点基于nginx代理搭建https协议支持
- html标签栏logo怎么加,在htmltitle/title标签添加图标,网页title左边显示网页的logo图标...
- matlab命令批量重命名,MATLAB中预定义对话框之文件打开对话框以及如何批量重命名...
- bzoj4864 [BeiJing 2017 Wc]神秘物质
- python scipy.signal.pwelch_Welch’s power spectral density estimate
- opengl 投影矩阵和深度测试
- Halo博客的谷歌收录自动提交
- DEV——ComboBoxEdit(barEditItem)
- Vue基础知识总结 6:vue双向绑定原理