开发者问题收集

JavaScript 中的数字到字符串转换错误

2014-10-24
1378

您是否曾尝试过在 javascript 中将大数字转换为字符串?

请尝试此操作:

var n = 10152557636804775;
console.log(n); // outputs 10152557636804776

您能帮助我理解原因吗?

1个回答

10152557636804775 高于 JavaScript 中可以 安全 表示的最大整数(即 Number.MAX_SAFE_INTEGER )。另请参阅 这篇文章 了解更多详情。

摘自 MDN (重点是我的):

The MAX_SAFE_INTEGER constant has a value of 9007199254740991. The reasoning behind that number is that JavaScript uses double-precision floating-point format numbers as specified in IEEE 754 and can only safely represent numbers between -(2^53 - 1) and 2^53 - 1.

要检查给定变量是否可以安全地表示为整数(没有表示错误),您可以使用<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger" rel="nofollow <code>IsSafeInteger() :

var n = 10152557636804775;
console.assert(Number.isSafeInteger(n) == false);
Adriano Repetti
2014-10-24