Open sisterAn opened 4 years ago
const regex = /^(?
//可以传两个参数 parsenInt('123',5)将'123'看作5进制 返回10进制
function _parseInt2(str, radix) {
//1. 对入参做判断
let strType = typeof str
if (strType !== 'string' && strType !== 'number') return NaN
if (typeof radix !== 'number' || radix < 2 || radix > 36) return NaN
//2. 对str做处理 只取整数部分
let strHandle = String(str).trim().split('.')[0]
console.log('strHandle: ', strHandle);
if (strHandle.length === 0) return NaN
//3. radix处理
if (!radix) radix = 10
//4. 转换逻辑 将字符反转
let strReverse = strHandle.split('').reverse().join('')
console.log('strReverse: ', strReverse);
let res = 0
for (let i = 0, len = strReverse.length; i < len; i++) {
if (strReverse[i] >= radix) return NaN
res += strReverse[i] * Math.pow(radix, i)
}
return res
}
console.log(_parseInt2('123', 5))
返回解析后的整数值。 如果被解析参数的第一个字符无法被转化成数值类型,则返回
NaN
。注意:
radix
参数为n
将会把第一个参数看作是一个数的n
进制表示,而返回的值则是十进制的。例如:以下 2 进制没有问题
考虑 16 进制,完整版如下