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中文網其他相關文章!