我尝试了很多来自这个网站的提示,但是我无法正确地将负浮点数或双精度转换为二进制表示。一些数字工作正常,但如果我想转换-11.1我得到错误的位表示。
我的代码:
public static String fromFloatTo64Binary(String input) {
input = input.replaceAll(",", ".");
double number = Double.parseDouble(input);
long longBits = Double.doubleToLongBits(number);
String result = Long.toBinaryString(longBits);
// check if input is signed
if (input.substring(0, 1).equalsIgnoreCase("-")) {
result = 1 + result;
} else {
result = 0 + result;
}
return result;
}
输入:11.1
输出:0 1000000 00100110 00110011 00110011 00110011 00110011 00110011 00110011
输入:-11.1
产量:1 1100000 00010011 00011001 10011001 10011001 10011001 10011001 10011001
再次将这些位转换为十进制:-6.402228286547589E154
答案 0 :(得分:3)
以下似乎有效:
input = input.replaceAll(",", ".");
double number = Double.parseDouble(input);
long longBits = Double.doubleToLongBits(number);
String result = Long.toBinaryString(longBits);
StringBuilder builder = new StringBuilder();
for (int i = result.length(); i < 64; i++) {
builder.append('0');
}
return builder.append(result).toString();
(IDEOne结果为https://ideone.com/winQFa)
答案 1 :(得分:0)
路易斯·沃瑟曼很清楚地说明了这一点,但我在这里也提供了一个简单的线路代码来解决这个问题: -
System.out.println(Long.toBinaryString(Double.doubleToRawLongBits(-11.1)));
此问题已在此深入讨论How to convert negative double value to binary value in java?
希望它有所帮助。祝你有美好的一天!