数字到字母顺序

时间:2015-06-23 18:20:20

标签: javascript

所以我有一种情况,我会得到一个数字(介于1 - 1000之间),需要将其转换为字符串,如下所示:

1  = A
2  = B
3  = C
...
25 = Y
26 = Z
27 = AA
28 = AB
...
52 = AZ
53 = BA
54 = BB
55 = BC
...
78 = BZ
79 = CA
80 = CB
...
702 = ZZ
703 = AAA

到目前为止,我有这个,但我得到了错误的答案:

count_to_string = function(count) {
    var div = Math.floor(count/26);
    var rem = count % 26; 
    ll = '';
    if (div > 0) ll = ll + String.fromCharCode('A'.charCodeAt() + (div-1));
    return ll + String.fromCharCode('A'.charCodeAt() + (rem-1));
};

使用输入26运行输出:A @

4 个答案:

答案 0 :(得分:2)

如果只想返回字符串,可以在增加字符串连接时使用循环。此方法没有限制:



function countToString(count){
  var arr = [];
  while(count >> 0 > 0){
    arr.unshift(String.fromCharCode(65 + --count % 26));
    count /= 26
  }
  return arr.join("")
}

[1,2,3,25,26,27,28,52,53,54,55,78,79,80,702,703,99999,6e6].forEach(function(num){
  document.write(num + " = " + countToString(num) + "<br>")
})
&#13;
&#13;
&#13;

答案 1 :(得分:1)

我认为这会帮助你而不是Math.floor,因为回答问题并且截断只会让你得到你想要的东西

    var div = Math.trunc(count/26);

答案 2 :(得分:1)

您有rem-1而不是rem。以下是修复和输出的代码:

var count_to_string = function(count) {
var div = Math.floor(count/26);
var rem = count % 26;

  ll = '';
  if (div > 0) ll = ll + String.fromCharCode('A'.charCodeAt() + (div-1));
  return ll + String.fromCharCode('A'.charCodeAt() + (rem)); //Here is the fix
};

for (var i = 0; i < 58; i++) {
  console.log(count_to_string(i));
}

输出是:

A
B
C
D
E
...
V
W
X
Y
Z
AA
AB
AC
...
AZ
BA
BB
BC
BD
BE
BF

答案 3 :(得分:0)

第一个建议是先计算余数,然后在计算quocient之前减去它的数量。这样做除法总是准确的,并且由于四舍五入你不会得到任何错误。换句话说,将函数的前两行更改为:

var rem = count % 26; 
var div = Math.floor((count-rem)/26);

我认为这可能有助于避免错误,但我会尝试考虑别的事情,然后编辑这个答案。