我的JavaScript方程有问题(二进制到十进制转换器的一部分)

时间:2013-01-02 21:20:28

标签: javascript binary decimal converter equation

所以这是一种愤怒,一个简单的等式产生了一个我无能为力的随机数。

好的,所以我正在尝试制作一个从Binary转换为Base Ten的应用程序。我知道这样做的一种方法就是这样做。

说,11001到十点。

取最左边的数字:1

0 * 2 + 1(This 1 is the leftmost binary digit) = 1...
1 * 2 + 1(This 1 is the second leftmost binary digit) = 3...
3 * 2 + 0(etc...) = 6...
6 * 2 + 0 = 12...
12 * 2 + 1 = 25...

所以,这正确地转换为25.虽然,当我在JavaScript中使用变量插入该等式时,它会变成随机的废话。

观看:

Inputarray是用户输入的数字中所有字符的数组。所以,如果是11010,则inputarray是1,1,0,1,0。

然后它循环遍历数组的每个字符,并将每个数字插入等式中,如图所示。

for (var j=0;j<=uinputlen;j++) {
var nextletter = uinput.charAt(j);
inputarray.push(nextletter);
}

for (var h=0;h<=uinputlen;h++) {
decvalue = decvalue * 2 + inputarray[h];
}

BTW,“decvalue”在我的代码开头预设为0.

请对描述或其他任何问题发表评论,这有点令人困惑。

3 个答案:

答案 0 :(得分:3)

JavaScript可以原生地执行此操作:

var binary = "11001";
var decimal = parseInt(binary,2);

// other way:

var decimal = 1234;
var binary = decimal.toString(2);

答案 1 :(得分:0)

您正在添加字符代码,而不是数字代表的值。 .charAt()将返回'0''1'这是一个字符串,因此,它将作为字符串添加。

我建议您更改将值推送到以下内容的方式:

inputarray.push(nextletter == '1' ? 1 : 0)

inputarray.push(nextletter * 1)

答案 2 :(得分:0)

由于您在输入数组中获取了字符,因此JavaScript将结果转换为字符串:

var a = 0; a = a * 2 + '1'; alert(a); //alerts "01"

为了获得所需的行为,您需要转换字符串:

var a = 0; a = a * 2 + Number('1'); alert(a); //alerts 1

一般来说,有更好的方法可以做到这一点,(例如@ Kolink的回答)

有关详细信息,请参阅http://www.quirksmode.org/js/strings.html#stringnum