Как преобразовать десятичную (xx.xx) в двоичную - PullRequest
6 голосов
/ 23 сентября 2010

Это не обязательно вопрос программирования, но я уверен, что вы, ребята, знаете, как это сделать.Как мне преобразовать числа с плавающей запятой в двоичное.

Число, на которое я смотрю, равно 27,625.

27 будет 11011, но что мне делать с .625?

Ответы [ 4 ]

13 голосов
/ 23 сентября 2010

На бумаге хорошим алгоритмом для преобразования дробной части десятичного числа является алгоритм «повторное умножение на 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.

Если вам нужен инструментделать эти виды преобразований автоматически, см. мой десятичный / двоичный преобразователь .

8 голосов
/ 23 сентября 2010

Предполагая, что вы не думаете о ПК, просто думаете о двоичном и десятичном, как это физически представлено на листе бумаги:

Вы знаете, что в двоичном формате .1 должно быть .5 в десятичном, поэтому.1-е место стоит .5 (1/2)

.01 стоит .25 (1/4) (половина предыдущего)

.001 стоит (1 /8) (Половина 1/4)

Обратите внимание, как знаменатель прогрессирует так же, как целые числа слева от десятичной дроби - стандартный шаблон ^ 2?Следующее должно быть 1/16 ...

Итак, вы начинаете с 0,625, это выше, чем 0,5?Да, поэтому установите первый бит и вычтите двоичный файл .5

.1 с десятичным остатком .125

Теперь у вас есть следующее место, оно стоит .25dec, это меньше, чемваш текущий остаток .125?Нет, поэтому у вас недостаточно десятичного числа «Деньги», чтобы купить это второе пятно, это должен быть двоичный код 0

.10, оставшийся остаток .125.

Теперь перейдите ктретье место и т. д. (Подсказка: я не думаю, что будет слишком много и т. д.)

1 голос
/ 23 сентября 2010

Существует несколько различных способов кодирования нецелого числа в двоичном виде.На сегодняшний день наиболее распространенным типом являются представления с плавающей запятой, особенно кодифицированные в IEEE 754 .

0 голосов
/ 19 апреля 2016

код работает для меня, как показано ниже, вы можете использовать этот код для преобразования любого типа значений 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

    }
...