gpt4 book ai didi

javascript - 如何将二进制分数转换为十进制

转载 作者:数据小太阳 更新时间:2023-10-29 04:47:29 26 4
gpt4 key购买 nike

Javascript 有函数 parseInt() 可以帮助将二进制形式的整数转换为十进制形式的整数:

parseInt("101", 2) // 5

但是,我需要将二进制小数转换为十进制等价物,例如:

0.101 = 0.625

我可以编写自己的函数来计算如下结果:

1 * Math.pow(2, -1) + 0*Math.pow(2, -2) + 1*Math.pow(2, -3) // 0.625

但我想知道是否已经有任何标准。

最佳答案

这个问题询问是否有一些解析二进制 float 的 JavaScript 标准,好像 parseFloat() 可以采用第二个基数参数来解析二进制数 0.101 像这样:parseFloat('0.101', 2)

虽然没有这样的标准,但有一种简单直接的方法可以解决这个问题。

如果我们将二进制数 0.101 表示为二进制小数,它很容易转换为小数:

0.1012 = 1012/10002 = (5/8)10 = 0.625

以下单行表达式将其转换为 JavaScript。这里,num 可以是任何类型的二进制数(表示为字符串),包括负数:

parseInt(num.replace('.', ''), 2) / Math.pow(2, (num.split('.')[1] || '').length)

该解决方案很容易适应 2 到 36 之间任何基数的 float ,我们可以将其包装在我们自己的 parseFloatRadix() 函数中:

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

test('0.101', 2, 0.625);
test('0.011', 2, 0.375);
test('0.0011', 2, 0.1875);
test('-011', 2, -3);
test('011', 2, 3);
test('-1100.0011', 2, -12.1875);
test('1100.0011', 2, 12.1875);
test('0.00011001100110011001100', 2, 0.09999990463256836);

test('ABC', 16, 2748);
test('-0.DEF', 16, -0.870849609375);
test('ABC.DEF', 16, 2748.870849609375);

test('-102.201', 3, -11.703703703703704);
test('-Z.ZZZ', 36, -35.99997856652949);

function test(num, radix, expected){
let result = parseFloatRadix(num, radix);
console.log(num + ' (base ' + radix +') --> ' + result +
(result === expected ? ' (OK)' : ' (Expected ' + expected + ')'));
}

关于javascript - 如何将二进制分数转换为十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37109968/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com