javascript - 如何在没有 parseInt() 的 JavaScript 中创建二进制到十进制
问题描述
我试图在不使用 parseInt () 的情况下创建二进制到十进制转换器
这是我的代码:
var inp = `110010`;
var len = inp.length;
var string = inp.split("");
var counter = string.map(function(val,i){
return i;
}).reverse();
var storeBin = string.map(function(val,i){
let x ="";
if(val>0){
x += 2;
}else if(val===0){
x += 0;
}
return Math.pow(string[i]*x,counter[i]);
});
var dec=0; /* output */
for(i=0;i<len;i++){
dec += storeBin[i]
}
console.log("Entered binary "+inp);
console.log("Decimal "+dec);
当我运行它时:
Input: 1010
Output: Entered binary 1010
Decimal 11
但是二进制 1010 的输出现在应该是 10 11 有人可以帮我找到这段代码中的问题吗
解决方案
你需要这样做return val * Math.pow(2, counter[i]);
。
var inp = `110010`;
var len = inp.length;
var string = inp.split("");
var counter = string.map(function(val, i) {
return i;
}).reverse();
var storeBin = string.map(function(val, i) {
return val * Math.pow(2, counter[i]);
});
var dec = 0; /* output */
for (i = 0; i < len; i++) {
dec += storeBin[i]
}
console.log("Entered binary " + inp);
console.log("Decimal " + dec);
仅供参考: 二进制数的对应十进制数是二进制数字的总和(dn)乘以它们的 2 的幂(2^n):
decimalNum = d0 × 2^0 + d1 × 2^1 + d2 × 2^2 + ...
Array#reduce
甚至您可以使用该方法使其更简单。
var inp = `110010`;
var dec = inp.split('').reduce(function(val, d, i, arr) {
return val + Math.pow(2, arr.length - i - 1) * d;
}, 0);
console.log("Entered binary " + inp);
console.log("Decimal " + dec);
或者用Array#reverse
方法。
var inp = `110010`;
var dec = inp.split('').reverse().reduce(function(val, d, i) {
return val + Math.pow(2, i) * d;
}, 0);
console.log("Entered binary " + inp);
console.log("Decimal " + dec);
推荐阅读
- java - Java改变饱和度产生扭曲的颜色
- python - 删除同名目录中的所有文件?
- arduino - Arduino Nano 无法上传草图
- ios - @State 在变异函数和初始化程序中更改时不更新 SwiftUI 视图
- ios - 在 tableView 中使用 RxSwift 和可变部分时,每个部分只显示一项
- java - 从 API 更新 JSON 响应,并使用 Rest Assured 将更新的响应作为输入/正文传递给另一个 API
- python - 为什么它 l[i].pop(0) 是子列表的第二个元素而不是第一个
- http - Chrome 忽略 HTTP WWW-Authenticate 领域
- arrays - Is there a way to create an array using env?
- python - 从值不是 NaN 的多个列创建新列