所以这是一种愤怒,一个简单的等式产生了一个我无能为力的随机数。
好的,所以我正在尝试制作一个从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.
请对描述或其他任何问题发表评论,这有点令人困惑。
答案 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。