【问题标题】:Convert point binary to float将点二进制转换为浮点
【发布时间】:2018-10-17 16:45:46
【问题描述】:

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

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

【问题讨论】:

  • 点二进制应该是什么?!
  • @JonasW。只是二进制点,如 0.101、0.1111、0.000110101 等。

标签: javascript algorithm binary decimal


【解决方案1】:

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】:

    试试这个将基数作为第二个参数的 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
    

    【讨论】:

      【解决方案3】:

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

      在 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.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)
      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-02-23
        • 2014-11-24
        • 2017-06-24
        • 2011-06-03
        • 2011-04-26
        • 2021-07-30
        • 1970-01-01
        相关资源
        最近更新 更多