如何将二进制分数转换为小数分数?

时间:2015-11-02 02:58:00

标签: javascript

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

2 个答案:

答案 0 :(得分: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;
}

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

答案 1 :(得分:0)

  

我想在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 + ')'));
}