我想把一个数字转换成字符,例如:
- 如果数字是1,则对应的字符为A
- 如果数字是26,则对应的字符为Z
- 如果数字是27,则对应的字符为AA
- 如果数字是676,则对应的字符为ZZ
- 如果数字是456976,则对应的字符为ZZZZ
我尝试寻找任何有助于我解决此问题的内容,但没有成功。有人有JavaScript代码的示例吗?
谢谢!
我想把一个数字转换成字符,例如:
我尝试寻找任何有助于我解决此问题的内容,但没有成功。有人有JavaScript代码的示例吗?
谢谢!
function numToSSColumn(num){
var s = '', t;
while (num > 0) {
t = (num - 1) % 26;
s = String.fromCharCode(65 + t) + s;
num = (num - t)/26 | 0;
}
return s || undefined;
}
// A Z AA CZ DA YZ ZZ AAA
[0,1,26,27,104,105,676,702,703,
//AAZ ABA AZZ BAA BAZ BBA YYYZ ZZZZ
728,729,1378,1379,1404,1405,456976,475254].forEach(function(n) {
console.log(n + ' : ' + numToSSColumn(n));
});
如果n < 0
,此函数不会检查输入并返回undefined。
你的转换似乎无效,因为电子表格列不是从0开始,而是从1开始,所以A-Z是1到26,AA到AZ是27到52,依此类推。676是YZ,456976是YYYZ。ZZZZ是475254(或11110 base26)。
您需要编写一个循环,并在每次通过时将数字 mod (%) 26,然后使用以下内容:
String.fromCharCode(num + 64) // if num is 1 then result is 'A'
我使用递归写了一个解决方案,只是出于好玩而已 :)
const numberToBase26 = (val, tail = '') => {
if (val <= 26) {
return `${String.fromCharCode(val + 64)}${tail}`;
}
const remainder = val % 26 || 26;
const division = Math.trunc(val / 26) - (remainder === 26 ? 1 : 0);
return numberToBase26(division, `${String.fromCharCode(remainder + 64)}${tail}`);
};
console.log(numberToBase26(475254), ' should be equal to ZZZZ');
function columnIndex(name) {
let index = 0;
name = name.toUpperCase().split('');
for (let i = name.length - 1; i >= 0; i--) {
let piece = name[i];
let colNumber = piece.charCodeAt() - 64;
index = index + colNumber * Number(Math.pow(26, name.length - (i + 1)));
}
return index;
}
['A', 'AA', 'AAA', 'AAB', 'MMMM', 'MMMN'].forEach((n) => {
console.log(n + ' : ' + columnIndex(n));
});
27 = AA
,那么 52 = ZZ
,但是根据你的例子,676 = ZZ
。你能详细说明一下你想生成的系列吗?
以防万一,以下是满足我的例子的算法:getAlphabetFromNumber = function (_num) {
var str = "";
multiples = Math.ceil(_num / 26);
_charAtCode = _num - ((multiples - 1) * 26)
for (let i = 0; i < multiples; i++)
str += String.fromCharCode(_charAtCode + 64);
return str;
}
以下是一个开始,打开你的检查器,选择控制台并粘贴以下代码:
cvt = function(n) {return(String.fromCharCode(n+'A'.charCodeAt(0)-1))}
现在你可以输入cvt(1)
来得到'A',或者输入cvt(26)
来得到'Z'
它只能用于一个字符。其余的就由你来解决。
0
呢?你怎么转换它? - Thomas