将数字转换为字母表字符串(Javascript)

时间:2017-08-20 22:48:45

标签: javascript data-conversion

我想将数字转换为像:

这样的字符
  • 如果number = 1则A
  • 如果number = 26则Z
  • 如果数字= 27则AA
  • 如果number = 676则为ZZ
  • 如果number = 456976则为ZZZZ

试图找到任何可以帮助我的东西,但我没有任何幸运。有人使用JavaScript有一个样本吗?

谢谢!

6 个答案:

答案 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;
}