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

7

这不一定是一个编程问题,但我相信你们知道如何做到。我该如何将浮点数转换为二进制?

我要转换的数字是27.625。

27可以表示为11011,但是我应该怎么处理小数部分的.625呢?


1
尝试访问http://math.stackexchange.com。 - NullUserException
同时,可以查看这个链接。还有一个工具可以帮助您完成转换。 - NullUserException
4个回答

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。
如果你想要一个自动执行这种转换的工具,请查看我的十进制/二进制转换器

这是个有趣的技巧——我从未见过。它并不能真正教你发生了什么——我想知道它如何转换到其他进制……我要去尝试一下八进制。 - Bill K
1
@ Bill K:它适用于任何进制!例如,对于八进制,只需将2替换为8(0.8125转换为八进制的0.64)。 - Rick Regan

9
假设你不考虑计算机内部,只是考虑二进制和十进制在纸上的物理表示:
你知道二进制中的0.1应该是十进制中的0.5,所以0.1的位数值为0.5(1/2)
0.01的位数值为0.25(1/4)(前一个的一半)
0.001的位数值为0.125(1/8)(1/4的一半)
注意分母的增长方式与小数点左边的整数一样——标准的^2模式?下一个应该是1/16...
因此,从0.625开始,它是否高于0.5?是的,所以设置第一个比特并减去0.5
0.1的二进制表示,带有0.125的小数余数
现在你有了下一个位置,它的值为0.25dec,比你当前的余数0.125小吗?不,所以你没有足够的十进制“资金”来购买第二个位置,必须是0
0.10的二进制表示,仍为0.125余数。
现在继续到第三个位置等等。(提示:我认为不会有太多等等。)

1

在二进制中编码非整数有几种不同的方法。迄今为止最常见的类型是浮点表示法,特别是在IEEE 754中规范化的一种。


0

以下是对我有效的代码,您可以使用此代码转换任何类型的双精度值:

 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

    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接