目录
使用原生方法实现
toString()
可以实现十进制转其他进制
//十进制转二进制
let num = 3
console.log(num.toString(2)) // 11
console.log(num) // 3
toString()方法可把一个 Number 对象转换为一个字符串并返回
语法:NumberObject.toString(radix)
参数 | 描述 |
---|---|
radix | 可选。规定表示数字的基数,使 2 ~ 36 之间的整数。若省略该参数,则使用基数 10。 |
parseInt()
可以实现其他进制转十进制
// 二进制转10进制
let num = 110
console.log(parseInt(num,2)) // 6
console.log(num) // 110
parseInt() 函数可解析一个字符串,并返回一个整数。
语法:parseInt(string, radix
参数 | 描述 |
---|---|
string | 必须,要被解析的字符串 |
radix | 可选,要解析的数字的基数。2~36之间。若省略该参数或值为0,则根据string来判断数字的基数 |
实例:
parseInt("10"); //返回 10
parseInt("19",10); //返回 19 (10+9)
parseInt("11",2); //返回 3 (2+1)
parseInt("17",8); //返回 15 (8+7)
parseInt("1f",16); //返回 31 (16+15)
parseInt("010"); //未定:返回 10 或 8
parseInt()
和toString()
结合可以实现各种进制之间相互转换:
parseInt(num,8); //八进制转十进制
parseInt(num,16); //十六进制转十进制
parseInt(num).toString(8) //十进制转八进制
parseInt(num).toString(16) //十进制转十六进制
parseInt(num,2).toString(8) //二进制转八进制
parseInt(num,2).toString(16) //二进制转十六进制
parseInt(num,8).toString(2) //八进制转二进制
parseInt(num,8).toString(16) //八进制转十六进制
parseInt(num,16).toString(2) //十六进制转二进制
parseInt(num,16).toString(8) //十六进制转八进制
手写JS实现
其他进制转十进制
从右向左各位数字乘以基数的幂次方
例如:二进制 110 = 0*2^0 + 1*2^1 + 1*2^2 = 6
function fn(a,b){
var arr = String(a)
var sum = 0
var p = arr.length
for(let i=0,len=arr.length;i<len;i++){
sum += Number(arr[p-1])*Math.pow(b,i)
p--
}
return sum
}
console.log(fn(110,2)) // 6 二进制转十进制
console.log(fn(11,8)) // 9 八进制转十进制
十进制转其他进制
除基取余,倒序排序
function Stack() {
let items = []
this.push = function(e){
items.push(e)
}
this.pop = function(e){
return items.pop()
}
this.peek = function(e){
return items[items.length-1]
}
this.isEmpty = function(e){
return items.length === 0
}
this.size = function(){
return items.length
}
this.clear = function(){
items = []
}
this.print = function(){
console.log(items.toString())
}
}
function fn(num,base){
let stack = new Stack()
let rem // 余数
let baseString = ''
let digits = '0123456789ABCDEF'
while(num>0){
rem = Math.floor(num%base)
stack.push(rem)
num = Math.floor(num/base)
}
while(!stack.isEmpty()){
baseString += digits[stack.pop()].toString()
}
return baseString
}
console.log(fn(11,16)) // B
console.log(fn(3,2)) // 11