JavaScript中的大整数科学计数法
JavaScript 会将超过 21 位的整数在字符串上下文中转换为科学计数法。如果您需要将整数作为 URL 的一部分进行打印,那么如何防止进行转换?
解决方案
JavaScript 提供了 Number.toFixed 方法,但如果数字大于或等于 1e21 且精度最高为 20,它将使用科学计数法。除此之外,您还可以自己实现,但这将会很混乱。
function toFixed(x) { if (Math.abs(x) < 1.0) { var e = parseInt(x.toString().split('e-')[1]); if (e) { x *= Math.pow(10,e-1); x = '0.' + (new Array(e)).join('0') + x.toString().substring(2); } } else { var e = parseInt(x.toString().split('+')[1]); if (e > 20) { e -= 20; x /= Math.pow(10,e); x += (new Array(e+1)).join('0'); } } return x; }
上述方法使用了廉价且简单的字符串重复((new Array(n 1)).join(str))。您还可以在此基础上定义 String.prototype.repeat,并使用俄罗斯农民乘法。
请注意,此答案仅适用于在不使用科学计数法的情况下显示大数的情况。对于其他任何情况,您都应该使用 BigInt 库,例如BigNumber, Leemon's BigInt 或 BigInteger。另外,新的原生 BigInt 即将推出,Chromium 和基于 Chromium 的浏览器(Chrome、新的 Edge [v79 后期版本]、Brave)以及 Firefox 都对其提供支持,而 Safari 也正在进行支持开发。
以下是如何使用 BigInt 进行转换:BigInt(n).toString()
示例:
const n = 13523563246234613317632; console.log("toFixed (wrong): " + n.toFixed()); console.log("BigInt (right): " + BigInt(n).toString());
以上是如何防止 JavaScript 将字符串中的大整数转换为科学记数法?的详细内容。更多信息请关注PHP中文网其他相关文章!