Estoy tratando de hacer un programa que pueda hacer conversiones tanto de decimal a binario como de binario a decimal.
Tengo problemas con la parte binaria a decimal del código. Perdóname, ya que sé que la codificación está bastante incompleta, pero no puedo entender dónde me estoy equivocando.
Actualmente obtengo un resultado parcialmente correcto en el campo de cálculo (por ejemplo, "hay un 1 en el valor de (2^0)" y "hay un 2 en el valor de (2^1)").
Sin embargo, cuando escribo 11 como decimal, el campo de cálculo repite el código dos veces (por ejemplo, "hay un 1 en el valor de (2^0)", "hay un 2 en el valor de (2^1)" ,"hay un 1 en el valor de (2^0)", "hay un 2 en el valor de (2^1)").
Obviamente, solo debe dar esos valores una vez por número.
Además, el campo de salida para el número binario real también es incorrecto, y algunas de las variables no se utilizan/no se necesitan, pero he estado tratando de solucionar el problema de repetir valores primero antes de trabajar en eso.
¡Cualquier ayuda sería muy apreciada!
function convertByArray(bval) { var rB = new Array(); var outstr = ""; var p, t, a, o; o = 0; for(var i=0; i<bval.length; i++) { var b = bval.charCodeAt(i); t = 2; p = i; a = t ** p; if(a === t ** p) { outstr += a; } var bV = b; $("txtCalc").value += "There is a " + a + " in the value " + "(" + t + "^" + p + ")" + "\n"; o += 1; b = bV; $("txtOut").value = outstr; } }Puede simplificar su código si accede al bit más significativo de la cadena de bits tomando la longitud (menos uno) y restándola de la posición actual. Puede acceder a caracteres de cadena como una matriz.
var $txtCalc = $(".txtCalc"); var $txtOut = $(".txtOut"); binaryToDecimal("10010101"); // 149 function binaryToDecimal(bval) { var base = 2, result = 0; for (var pos = 0; pos < bval.length; pos++) { var bit = +bval[(bval.length - 1) - pos]; if (bit === 1) { result += base ** pos; } var message = "There is a " + bit + " in the position (" + base + "^" + pos + ")"; $txtCalc.val($txtCalc.val() + message + "\n"); } $txtOut.val(result); } <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <input class="txtOut" /> <br /> <textarea class="txtCalc" rows="10" cols="60"></textarea>Alternativamente, puede simplemente su programa a lo siguiente. En JavaScript, puede analizar cualquier número en cualquier base y formatear a otra base.
var $txtOut = $(".txtOut"); binaryToDecimal("10010101"); // 149 function convertFromBaseToBase(number, fromBase, toBase) { return parseInt(number, fromBase).toString(toBase); } function binaryToDecimal(bval) { $txtOut.val(convertFromBaseToBase(bval, 2, 10)); } <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <input class="txtOut" />