首页 >web前端 >js教程 >如何防止 JavaScript 将字符串中的大整数转换为科学记数法?

如何防止 JavaScript 将字符串中的大整数转换为科学记数法?

Barbara Streisand
Barbara Streisand原创
2024-12-10 08:59:10692浏览

How to Prevent JavaScript from Converting Large Integers to Scientific Notation in Strings?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn