3

所以这很令人愤慨,一个简单的方程会产生一个我无法理解的随机数。

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

比如说,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];
}

顺便说一句,“decvalue”在我的代码开头预设为 0。

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

4

3 回答 3

3

JavaScript 可以原生地做到这一点:

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

// other way:

var decimal = 1234;
var binary = decimal.toString(2);
于 2013-01-02T21:26:11.433 回答
0

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

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

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

或者

inputarray.push(nextletter * 1)
于 2013-01-02T21:26:53.693 回答
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

于 2013-01-02T21:27:35.270 回答