将点二进制转换为浮点数

时间:2018-05-07 20:03:48

标签: javascript algorithm binary decimal

我有点二进制,例如0.10010011
如何将其转换为十进制浮点数?
(0.10010011 = 0.57421875)

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

3 个答案:

答案 0 :(得分:0)

尝试使用parseFloat的这个实现,它将radix作为第二个参数。

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

答案 1 :(得分:0)



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));




根据对此问题的回答进行修改How to convert binary fraction to decimal

答案 2 :(得分:0)

  

我有点二进制,例如0.10010011。   如何将其转换为十进制浮点数?

在JavaScript中进行此转换的最简单,最直接的方法是将浮点二进制表示为二进制分数,将其转换为十进制分数,然后计算浮点十进制:

  

0.10010011 2 = 10010011 2 / 100000000 2 =(147/256) 10 = 0.57421875

翻译成JavaScript:

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

我们可以轻松地将转换代码调整为通用函数,以便从任何基础解析浮点。 This stackowerflow answer提供了更多详细信息。下面的演示代码。

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

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