我想将数字转换为像:
这样的字符试图找到任何可以帮助我的东西,但我没有任何幸运。有人使用JavaScript有一个样本吗?
谢谢!
答案 0 :(得分:3)
我使用递归编写了一个解决方案,好吧……真的很有趣:)
<db:insert config-ref="Generic_Database_Configuration" doc:name="Database" transactionalAction="NOT_SUPPORTED">
<db:parameterized-query><![CDATA[insert into EIS.T_TABLE (ID, EXPIRY_TIMESTAMP, INSERT_TIMESTAMP, CC_DATA, CORRELATION_ID) values(:ID, :EXP_TIME, :INSERT_TIME, :CC_DATA, :CORRELATION)]]></db:parameterized-query>
<db:in-param name="ID" type="NCHAR" value="#[db_data.ID]"/>
<db:in-param name="EXP_TIME" type="TIMESTAMP" value="#[db_data.EXPIRY_TIMESTAMP.toString()]"/>
<db:in-param name="INSERT_TIME" type="TIMESTAMP" value="#[db_data.INSERT_TIMESTAMP.toString()]"/>
<db:in-param name="CC_DATA" type="VARBINARY" value="#[db_data.CC_DATA]"/>
<db:in-param name="CORRELATION" type="NVARCHAR" value="#[db_data.CORRELATION_ID]"/>
答案 1 :(得分:2)
您展示的数字转换似乎不一致。您似乎想要将数字转换为等效的电子表格列字母,类似于此Python问题:Convert spreadsheet number to column letter。
将该代码转换为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);
答案 2 :(得分:1)
重要的部分是charCodeAt,它返回任何字符的ASCII值。
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));
});
答案 3 :(得分:0)
你需要编写一个循环,每次修改(%)数字26,并使用以下内容:
String.fromCharCode(num + 64) // if num is 1 then result is 'A'
答案 4 :(得分:0)
这是一个开始,打开检查器,选择控制台。并将其粘贴到:
-o C:/Users/Josue/Downloads/%(title)s.%(ext)s
现在您可以输入cvt = function(n) {return(String.fromCharCode(n+'A'.charCodeAt(0)-1))}
来获取'A',或cvt(1)
来获取'Z'
它仅适用于一个角色。剩下的就是让你锻炼
答案 5 :(得分:0)
你有非常奇怪的案例很难理解。如果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;
}