如果你创建了以下函数并执行,你将得到一个返回:11111111111111112。如果你做了更多,你会得到指数。我只想取一长串数字并将它们放入一个数组中(后续将是函数的一个分区)。反正这种奇怪吗?
function sum2one(num) {
var numtostring = num.toString();
console.log(numtostring);
}
sum2one(11111111111111111);
答案 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);