【发布时间】:2015-11-02 02:57:59
【问题描述】:
我想在 JavaScript 中将二进制小数转换为十进制,例如 0.00011001100110011001100。但是我发现parseFloat和parseInt一样没有基数,那我该怎么做呢?
【问题讨论】:
标签: javascript
我想在 JavaScript 中将二进制小数转换为十进制,例如 0.00011001100110011001100。但是我发现parseFloat和parseInt一样没有基数,那我该怎么做呢?
【问题讨论】:
标签: javascript
可能有更好的方法,但这里有一个通用函数,可以选择你自己的基数
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;
}
没有对输入或基数进行错误检查,但它似乎工作正常
【讨论】:
我想在 JavaScript 中将二进制小数转换为十进制,例如
0.00011001100110011001100。但是我发现parseFloat和parseInt一样没有基数,那我该怎么做呢?
我们可以像这样构建一个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 + ')'));
}
【讨论】: