如何使用Javascript

时间:2018-04-19 02:00:51

标签: javascript recursion

我正在研究一个程序,它的工作是迭代所有可能的ASCII字符。代码能够成功转换为一个点。输入数字100000000000000008191时,如果输入下一个数字!__Ej2~nHK%,则返回值为100000000000000008192,返回值为!__Ej2~nHK%,值相同。这发生在序列中的下一个和下一个序列中。 16384数字生成相同的值变得如此无效。

这不应该发生,因为在任何数字系统中计数时,不同的数值不应该相同。

有谁知道它有什么问题吗?

function generate(state) {
  const printables = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~'
  var ones = state % printables.length
  var newstate = Math.floor(state / printables.length)
  if (newstate !== 0) {
    return generate(newstate) + printables[ones]
  } else {
    return printables[ones]
  }
}
console.log(generate(90071992514740992227))

1 个答案:

答案 0 :(得分:0)

您超过Number.MAX_SAFE_INTEGER,即9007199254740991。您添加到此数字的额外值将作为舍入错误丢失,这就是您转换为ASCII的原因价值没有变化。