在线转化:http://www.binaryconvert.com

 import java.text.DecimalFormat;

 public class SinglePrecision {

 //浮点到二进制
public String Float2Binary(double n) {//使用double输入,不影响
int signBit;//符号位
// String s = Float.toString((float) n); 这个方法会自动用 科学记数法4.52E-4
String s = (new DecimalFormat("################.######")).format(n); /**
* 处理符号位
* 本来是有正负0的,这个地方就默认是正0了
*/
if (n == 0) {
signBit = 0;
} else if (n < 0) {
signBit = 1;
s = s.substring(1);//把负号去掉
} else {
signBit = 0;
} /**
* 不用判断是小数还是整数,Float.toString()会自动在整数后补0,0也一样
* 将整数部分小数部分分开:
*/
String intFloat[] = s.split("\\.");
int intPart = Integer.valueOf(intFloat[0]);
float floatPart = Float.valueOf("0." + intFloat[1]);
// System.out.println(s);
// System.out.println(intPart);
//处理整数部分
boolean isReady = false;
String str_intpart = ""; //以1开头的二进制数 如10——>1010,而不是32位
for (int i = 31; i >= 0; i--) { //
if (((intPart >> i) & 1) == 1) {
isReady = true;
}
if (isReady) {
str_intpart += ((intPart >> i) & 1) == 1 ? 1 : 0;
}
} //处理小数部分——乘2取整法
String str_floartPart = "";
while (floatPart != 0) {
floatPart *= 2;
if (floatPart >= 1) {
floatPart -= 1;
str_floartPart += 1;
} else str_floartPart += 0;
} /**
* 规格化
*/
String str_int_float = str_intpart + str_floartPart+"0000000000000000000000000000000"; //补0是因为可能不够长
//现在得到二进制下的:"整数(.)小数"格式。考虑规格化
int diff = 0;// 规格化所要将小数部分移动的位数,主要是针对整数部分为0的
int intlen = str_intpart.length();
str_intpart = str_int_float.substring(0, 1);
str_floartPart = str_int_float.substring(1,23);
while (str_intpart.charAt(0) != '1') {
str_intpart = str_floartPart.substring(0, 1);
str_floartPart = str_floartPart.substring(1);
diff++;
} int expChange = intlen != 0 ? intlen - 1 : -diff - 1; //规格化所带来的指数的移动 //得到8位指数部分;
int exponential = expChange + 127;//真正的指数
String exp = ""; //指数
for (int i = 7; i >= 0; i--) {
exp += ((exponential >> i) & 1) == 1 ? 1 : 0;
} //得到23位底数部分
String base = str_floartPart;
int len = base.length();
for (int i = 0; i < 23 - len; i++) {
base += 0;
} return signBit + " " + exp + " " + base;
}

   //二进制到浮点小数
public double binary2Float (String binary){
if (binary.length()!=32) {
System.out.println("Error!");
return 0;
}
String exp = binary.substring(1,9);
String base = "1"+binary.substring(9);
/**
* 分类:
* 底数全是0
*/
double Base = 0;
int Exp = Integer.valueOf(exp,2)-127;
for (int i =0;i<24;i++){
Base+=(base.charAt(i)=='1'?Math.pow(2,-i):0);
}
return Base*Math.pow(2,Exp);
} public static void main(String[] args) {
SinglePrecision sp = new SinglePrecision();
System.out.println(sp.Float2Binary(256.9375));
System.out.println(sp.binary2Float("01000011100000000111100000000000")); /**
* output:
* 0 10000111 00000000111100000000000
* 256.9375
*/ }
} //目前精度还是不够,误差较大。

Float与二进制之间的转化(Java实现)的更多相关文章

  1. 十进制二进制之间的转化 PHP算法

    [ 十进制转二进制 ] function test($var){ $func = function($i){ if($i < 2){ return $i; } $return['int'] = ...

  2. java对象与Json字符串之间的转化(fastjson)

    1. 首先引入jar包 在pom.xml文件里加入下面依赖: <dependency> <groupId>com.alibaba</groupId> <art ...

  3. JAVA 文件与base64之间的转化, 以及Web实现base64上传文件

    <1>文件与base64字符串之间的转化 package servlet_file_upload; import java.io.File; import java.io.FileInpu ...

  4. Java中InputStream和String之间的转化

    https://blog.csdn.net/lmy86263/article/details/60479350 在Java中InputStream和String之间的转化十分普遍,本文主要是总结一下转 ...

  5. java类继承总结一 父类类型与子类类型之间的转化问题(转)

    java类继承总结一 父类类型与子类类型之间的转化问题 本文将通过一个实例描述父类类型与子类类型之间的转化问题,这个很特殊的问题常常会导致一些潜在的危险,让你整整一个晚上都在调试程序以解决一个让人抓狂 ...

  6. java对象与Json字符串之间的转化

    public class Test { public static void main(String[] args) { // 实现java对象与Json字符串之间的转化 // 1. Person对象 ...

  7. json与javabean之间的转化

    接着上一个http://www.cnblogs.com/ya-qiang/p/9009134.html随笔,继续介绍json与java对象之间的转化 一.java普通对象和json字符串的互转 jav ...

  8. python学习,day2:python字符串和二进制之间的互换

    在python3中,byte二进制和striing字符串之间不能直接操作,需要进行编码和解码才行.下面是个例子 msg = '我爱北京天安门' print(msg) print(msg.encode( ...

  9. c++数字和字符之间的转化

    关于C++中数与字符之间的转化 在c++中我们经常遇到需要把一个数变成字符,或者把字符变为一个数,c++中没有直接的转化函数,故我们需要自己去写函数去转化,这里我将介绍两种比较简单的方法: 法一: s ...

随机推荐

  1. request.setCharacterEncoding()、response.setCharacterEncoding()的区别

    request.setCharacterEncoding()是你设置获得数据的编码方式.response.setCharacterEncoding()是你响应时设置的编码.response.setCo ...

  2. 十三、u-boot 调试-- NOR FLASH 支持

    13.1 问题现象 在烧写进去的u-boot 中 Flash 并没有显示实际大小,需要进行修改. 13.2 问题定位过程 13.2.1 关键字搜索 Flash: 此关键字在 Board_r.c (co ...

  3. luogu 1484\1792 种树 奇怪的贪心可反悔

    1484 种树 此版本是线性的,那么根据链表维护即可: 构建新点,点的左右分别是原整个区间的前驱及后继,再正常维护即可 注意两个版本的维护有所不同 第二个版本的维护直接将左右两点删除 1792 种树2 ...

  4. Spring 快速开始 Profile 和 Bean

    和maven profile类似,Spring bean definition profile 有两个组件:声明和激活. [栗子:开发测试环境使用HyperSQL 生产环境使用JNDI上下文根据配置查 ...

  5. 【bzoj 1901】Zju2112 Dynamic Rankings

    Description 给定一个含有n个数的序列a[1],a[2],a[3]……a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+2]……a[j]中第k小的数是 ...

  6. 前段js的各种弹出框

    artDialog 首页 > 文档与示例 artDialog —— 经典的网页对话框组件,内外皆用心雕琢. 支持普通与 12 方向气泡状对话框 完善的焦点处理,自动焦点附加与回退 支持 ARIA ...

  7. Mysql 的远程设置 和链接方式

    Mysql 设置远程链接: > grant all privileges on *.* to 用户@localhost identified by '密码'; > flush privil ...

  8. promise.all方法合并请求接口的两个值

    function promise1 = new Promise((resolve,reject)=>{ return result1 }) function promise2 = new Pro ...

  9. c++ virtual 记录

    虚继承: http://zh.wikipedia.org/wiki/%E8%99%9A%E7%BB%A7%E6%89%BF 解决了菱形继承问题 cB cC 继承cA    cD继承cB,cC    c ...

  10. windows基本命令大全

    1.DOS常用命令详解 dir 列文件名 deltree 删除目录树 cls 清屏 cd 改变当前目录. copy 拷贝文件 diskcopy 复制磁盘 del 删除文件 format 格式化磁盘. ...