如何将十进制(xx.xx)转换为二进制

时间:2010-09-23 17:37:10

标签: binary decimal

这不一定是编程问题,但我相信大家都知道如何去做。我如何将浮点数转换为二进制数。

我看的数字是27.625。

27将是11011,但我怎么处理.625?

4 个答案:

答案 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

    }