Преобразование двоичной точки в плавающую

У меня есть двоичная точка, например 0.10010011
Как преобразовать его в десятичное число с плавающей запятой?
(0,10010011 = 0,57421875)

var a = 0.10010011
var b = point_bin2dec(a)
console.info(b) // 0.57421875

какой должна быть двоичная точка ?!

Jonas Wilms 07.05.2018 22:09

@JonasW. просто двоичный с точкой вроде 0,101, 0,1111, 0,000110101 и т. д.

ramazan793 07.05.2018 22:10
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
2
94
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Попробуйте эту реализацию parseFloat, которая принимает в качестве второго аргумента систему счисления.

const parseFloat = function parseFloat (string, radix = 10) {
  if (radix == 10) {
    return this(string)
  }

  string = String(string);

  const [iString, fString = '0'] = string.split('.')
  const iNumber = parseInt(iString, radix)
  const fNumber = parseInt(fString, radix)
  const fLength = Math.max(fNumber.toString(radix).length, fString.length)
  const sign = Infinity / iNumber === Infinity ? 1 : -1

  return iNumber + sign * fNumber / radix ** fLength
}.bind(parseFloat)

Применение:

parseFloat(0.10010011, 2); // 0.57421875
Ответ принят как подходящий

function point_bin2dec(num) {
    var parts = num.toString().split('.');
    return parseInt(parts[0], 2) + (parts[1] || '').split('').reduceRight(function (r, a) {
        return (r + parseInt(a, 2)) / 2;
    }, 0);
}
document.write(point_bin2dec(0.10010011));

Изменено из ответа на этот вопрос Как преобразовать двоичную дробь в десятичную

I have point binary, for example 0.10010011. How to convert it to decimal float?

Самый простой и прямой способ выполнить это преобразование в JavaScript - представить двоичный файл с плавающей запятой как двоичную дробь, преобразовать его в десятичную дробь, а затем вычислить десятичное число с плавающей запятой:

0.100100112 = 100100112/1000000002 = (147/256)10 = 0.57421875

Переведено на JavaScript:

a = '0.10010011'
b = parseInt(a.replace('.', ''), 2) / (1 << (a.split('.')[1] || '').length);
console.info(b); // 0.57421875

Мы можем легко адаптировать код преобразования к универсальной функции для разбора чисел с плавающей запятой из любой базы. Этот ответ stackowerflow предоставляет более подробную информацию. Демо-код ниже.

var a = '0.10010011';
var b = parseFloatRadix(a, 2);
console.info(b); // 0.57421875

function parseFloatRadix(num, radix) {
  return parseInt(num.replace('.', ''), radix) /
      Math.pow(radix, (num.split('.')[1] || '').length)
}

Другие вопросы по теме