这不一定是编程问题,但我相信大家都知道如何去做。我如何将浮点数转换为二进制数。
我看的数字是27.625。
27将是11011,但我怎么处理.625?
答案 0 :(得分:13)
在纸面上,转换十进制数小数部分的好算法是“重复乘2”算法(详见http://www.exploringbinary.com/base-conversion-in-php-using-bcmath/,标题为“dec2bin_f()”)。例如,0.8125转换为二进制,如下所示:
1. 0.8125 * 2 = 1.625
2. 0.625 * 2 = 1.25
3. 0.25 * 2 = 0.5
4. 0.5 * 2 = 1.0
整数部分被剥离并在每一步保存,形成二进制结果:0.1101。
如果您希望工具自动执行这些类型的转换,请参阅我的decimal/binary converter。
答案 1 :(得分:8)
假设你没有考虑在PC内部,只考虑在一张纸上实际表示的二进制与十进制:
你知道.1 in binary应该是十进制的.5,所以.1的位置值得.5(1/2)
.01值得.25(1/4)(前一个的一半)
.001值得(1/8)(1/4的一半)
注意分母是如何进展的,就像小数点左边的整数 - 标准^ 2模式一样?接下来应该是1/16 ......
所以你从.625开始,是否高于.5?是的,所以设置第一位并减去.5
.1二进制,小数余数为.125
现在你有下一个位置,值得.25dec,是否小于你当前剩余的.125?不,所以你没有足够的小数“金钱”购买第二个位置,它必须是0
.10二进制,仍为.125余数。
现在进入第三个位置等(提示:我认为不会有太多等等。)
答案 2 :(得分:1)
有几种不同的方法可以用二进制编码非整数。到目前为止,最常见的类型是浮点表示,尤其是IEEE 754中编码的表示。
答案 3 :(得分:0)
代码对我有用,如下所示,您可以使用此代码转换任何类型的dobule值:
private static String doubleToBinaryString( double n ) {
String val = Integer.toBinaryString((int)n)+"."; // Setting up string for result
String newN ="0" + (""+n).substring((""+n).indexOf("."));
n = Double.parseDouble(newN);
while ( n > 0 ) { // While the fraction is greater than zero (not equal or less than zero)
double r = n * 2; // Multiply current fraction (n) by 2
if( r >= 1 ) { // If the ones-place digit >= 1
val += "1"; // Concat a "1" to the end of the result string (val)
n = r - 1; // Remove the 1 from the current fraction (n)
}else{ // If the ones-place digit == 0
val += "0"; // Concat a "0" to the end of the result string (val)
n = r; // Set the current fraction (n) to the new fraction
}
}
return val; // return the string result with all appended binary values
}