首頁 >web前端 >js教程 >如何防止 JavaScript 將字串中的大整數轉換為科學記數法?

如何防止 JavaScript 將字串中的大整數轉換為科學記數法?

Barbara Streisand
Barbara Streisand原創
2024-12-10 08:59:10690瀏覽

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