十进制转与26进制的相互转换
/**
* 将十进制转换为26进制
* @param {Number} num 十进制数
* @param {Bolean} isUpper 是否输出为大写, 默认为小写
*/
export function convertToTwoteenSix(num, isUpper = true) {
let str = '';
let merchant = null;
const temp = num % 26;
str += isUpper ? String.fromCharCode(temp + 97).toUpperCase() : String.fromCharCode(temp + 97);
merchant = parseInt(num / 26);
if (merchant) {
str += convertToTwoteenSix(merchant - 1, isUpper);
}
// 从后往前存储,进行反转
return str.split('').reverse().join('');
}
console.log(convertToTwoteenSix(0)) // A
console.log(convertToTwoteenSix(26), fasle) // aa
/**
* 将26进制转换十进制
* @param {Number} str 26进制数
*/
export function convertToTen(str) {
const strToLower = (arg) => { // 字符串转小写
const str = arg.split('');
for (let i = 0; i < str.length; i++) {
if (!(str[i].charAt() >= "a" && str[i].charAt() <= "z")) {
str[i] = str[i].toLowerCase();
}
}
return str.join('');
};
const lowerStr = strToLower(str);
let num = 0;
let index = 1;
for (let i = lowerStr.length - 1; i >= 0; i--) {
const val = (i !== lowerStr.length - 1) ? ((lowerStr.charCodeAt(i) - 97) % 26) + 1 : (lowerStr.charCodeAt(i) - 97) % 26; // 因为乘法, 所以A是0, 需要加1相乘
num += val * index;
index = index * 26;
}
return num;
}
console.log(convertToTen('Ab'), convertToTen('AB')) // 27,27
console.log(convertToTen('z') // 25
版权声明:本文为zhang_xiao_xie原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。