JavaScript实现进制互转时二进制转十进制重复输出问题求助
问题修复方案
1. 重复输出问题解决
重复输出的核心原因是函数每次执行时没有清空计算字段的旧内容,如果你的触发事件(比如按钮点击、输入框change事件)被绑定了两次,或者多次触发了函数调用,内容就会重复追加。要解决这个问题,在遍历逻辑开始前先清空txtCalc和txtOut的内容即可。
2. 冗余变量清理
代码里以下变量属于完全未使用的冗余内容,可以直接删除:
- 空数组
rB - 字符编码相关变量
b、bV - 计数变量
o - 恒成立的判断
if(a === t ** p)(a本身就是t**p赋值的,这个判断没有任何意义)
3. 转换逻辑修正
当前的转换逻辑有两个核心错误:
- 没有判断当前二进制位是否为1,不管位上是0还是1都加了位权
- 位权计算顺序反了:二进制是从右到左位权从
2^0开始递增,你当前从左到右遍历用下标i作为幂次,会把高位和低位的权值搞反 - 输出的
outstr是直接拼接位权数字,不是累加位权值,自然得不到正确的十进制结果
修正后的完整代码
function convertByArray(bval) { // 先清空输出字段,避免旧内容累加 $("txtCalc").value = ""; $("txtOut").value = ""; var outstr = 0; // 改为数值类型,用来累加十进制结果 var t = 2; // 从右往左遍历二进制字符串 for(var i = 0; i < bval.length; i++) { // 取当前位的数字,注意是从右数第i位 var currentBit = parseInt(bval[bval.length - 1 - i]); var p = i; var a = t ** p; // 只有当前位是1的时候,才累加位权、输出计算记录 if(currentBit === 1) { outstr += a; $("txtCalc").value += "There is a " + a + " in the value " + "(" + t + "^" + p + ")" + "\n"; } } // 输出最终十进制结果 $("txtOut").value = outstr; }
内容的提问来源于stack exchange,提问作者Svetovid
相关产品推荐
相关产品推荐

