【问题标题】:How to convert a binary fraction number into decimal fraction number?如何将二进制小数转换为十进制小数?
【发布时间】:2015-11-02 02:57:59
【问题描述】:

我想在 JavaScript 中将二进制小数转换为十进制,例如 0.00011001100110011001100。但是我发现parseFloatparseInt一样没有基数,那我该怎么做呢?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    可能有更好的方法,但这里有一个通用函数,可以选择你自己的基数

    var binFraction = function(s, radix) {
        radix = radix || 2;
        var t = s.split('.');
        var answer = parseInt(t[0], radix);
        var d = t[1].split('');
        for(var i = 0, div = radix; i < d.length; i++, div = div * radix) {
            answer = answer + d[i] / div;
        }
        return answer;
    }
    

    没有对输入或基数进行错误检查,但它似乎工作正常

    【讨论】:

      【解决方案2】:

      我想在 JavaScript 中将二进制小数转换为十进制,例如 0.00011001100110011001100。但是我发现parseFloatparseInt一样没有基数,那我该怎么做呢?

      我们可以像这样构建一个parseFloatRadix() 函数:

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

      This stackowerflow answer 提供更多详细信息。演示代码如下。

      function parseFloatRadix(num, radix) {
        return parseInt(num.replace('.', ''), radix) /
            Math.pow(radix, (num.split('.')[1] || '').length)
      }
      
      test('0.00011001100110011001100', 2, 0.09999990463256836);
      
      function test(num, radix, expected){
        let result = parseFloatRadix(num, radix);
        console.log(num + ' (base ' + radix +') --> ' + result + 
          (result === expected ? ' (OK)' : ' (Expected ' + expected + ')'));
      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-05
        • 1970-01-01
        • 2011-01-08
        • 2010-12-08
        • 1970-01-01
        • 1970-01-01
        • 2014-12-04
        • 2017-02-18
        相关资源
        最近更新 更多