如何将-2.25之类的浮点数转换为二进制?我需要为从-20.5到20.5的域创建遗传算法的群体。每条染色体应仅用0s和1s重新印迹
1 = 01
0 = 00
4 = 100
等等
我知道如何转换“2”而不是0.25,也不知道带负号的数字
这是我的方法而且我被困在那里。转换浮点数,负数int或负浮点数
时,我无法知道如何增强它以给我正确的结果public class MinimizeRastriginFunction {
public static String binary="";
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
//float x=(float) 2.5;
int x =5 ;
System.out.println("Before :" + x);
decToBin(x);
System.out.println("After :" + binary);
}
private static Object decToBin(int dec) {
// TODO Auto-generated method stub
int num;
if (dec <=1) {
binary +=dec;
return null; // KICK OUT OF THE RECURSION
}
num= dec %2;
decToBin(dec >>1);
binary += num;
return null;
}
答案 0 :(得分:0)
<强>更新强> 根据你的评论,只保留20个字符,然后解决方案将如下所示:
import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
System.out.println(convert("0.25"));
System.out.println(convert("-0.25"));
System.out.println(convert("2"));
System.out.println(convert("-2"));
}
public static String convert(String input) {
double number = Double.parseDouble(input);
long longBits = Double.doubleToLongBits(number);
String result = Long.toBinaryString(longBits);
String upToNCharacters = result.substring(0, Math.min(result.length(), 20));
return upToNCharacters;
}
}
输出:
11111111010000000000
10111111110100000000
10000000000000000000
11000000000000000000
为什么不尝试这种方法。有一个内置功能可以帮助你
例如:
import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
System.out.println(convert("0.25"));
System.out.println(convert("-0.25"));
}
public static String convert(String input) {
double number = Double.parseDouble(input);
long longBits = Double.doubleToLongBits(number);
String result = Long.toBinaryString(longBits);
return result.replaceAll("0+$", "");;
}
}
同时检查here
你可以用它来转换你喜欢的所有dec,fload,负dec / float(s)
System.out.println(convert("0.25"));
System.out.println(convert("-0.25"));
System.out.println(convert("2"));
System.out.println(convert("-2"));
输出将是:
11111111010000000000000000000000000000000000000000000000000000
1011111111010000000000000000000000000000000000000000000000000000
100000000000000000000000000000000000000000000000000000000000000
1100000000000000000000000000000000000000000000000000000000000000
并在输出中使用某种格式(使用正则表达式删除所有尾随的0):
return result.replaceAll("0+$", "");
输出将是您想要的输出
1111111101
101111111101
1
11
最后,如果你需要返回一个Int(向量)数组,或者其他什么,你可以通过类似提到here之类的东西逐个处理它们。 mmoore在一个简单的循环中为转换提供了一个出色的答案:)
答案 1 :(得分:0)
我想你不需要为你的数字提供无限分辨率,例如: 2.4999
不需要获得与2.5000
不同的位模式。
使用分辨率,例如0.01
您可以执行:int bitsNumber = (int) ((value + 20.5) / 0.01);
然后将int转换为二进制字符串,就像您已经完成它一样(或使用Integer.toBinaryString(bitsNumber)
)。