javascript toString()用很长的数字做奇怪的事情......为什么?是否有解决方法?

时间:2017-01-23 20:52:20

标签: javascript

如果你创建了以下函数并执行,你将得到一个返回:11111111111111112。如果你做了更多,你会得到指数。我只想取一长串数字并将它们放入一个数组中(后续将是函数的一个分区)。反正这种奇怪吗?

function sum2one(num) {
  var numtostring = num.toString();
  console.log(numtostring);
}

sum2one(11111111111111111);

3 个答案:

答案 0 :(得分:1)

Javascript编号始终是64位浮点数。这就是为什么。这基本上导致了这样一个事实,即每个数字都没有精确的整数表示。

所以,事实上,toString()并没有做出奇怪的事情。它是以javascript语言存储/表示/实现数字的实际格式。

什么!浮点数学是不是破了?!不是,请参阅Is floating point math broken?

答案 1 :(得分:0)

Javascript uses 64-bit floating point numbers
我不认为可以在javascript中存储精确的数字。

还有其他选择,bigint库可以提供帮助。但是你应该只存储一个字符串。

答案 2 :(得分:0)

  

我只想拿出一长串数字并将它们放入   阵列

您可以使用Array.prototype.fill()

function sum2one(num, len, from, to, arr) {
  return  (arr 
          ? len > arr.length 
            ? (arr = [...arr, ...Array(len - arr.length)]) 
            : arr 
          : Array(len))
          .fill(num, from || 0, to || len)
}

let arr = sum2one(1, 17);

console.log(arr);

// set index 13

arr[13] = 2;

console.log(arr);

// fill indexes 14 through 21

arr = sum2one(3, 21, 14, 21, arr);

console.log(arr);