首頁 > web前端 > js教程 > 主體

數學命名空間和 BigInt

DDD
發布: 2024-09-13 22:19:32
原創
402 人瀏覽過

Math Namespace & BigInt

Math.sqrt 即 sqrt 是 Math 命名空間的一部份。

// 求平方根的 2 種方法。
數學.sqrt(100); // 10、方法一
100*(1/2); // 10、方法2
8
*(1/3); // 2, 也適用於立方根

Math.max() 和 Math.min():

Math.max(23,54,12,6,32,98,87,34,11); // 98
// 也進行型別強制
Math.min(23,54,12,'6',32,98,87,34,11); // 6
// 不進行解析
Math.min(23,54,12,'6px',32,98,87,34,11); // NaN

Math 物件內建的常數:

Math.PI * (Number.parseFloat('10px')**(2)); // 取得區域

生成無黑白 1-6:

Math.trunc(Math.random() * 6) + 1;

產生一個隨機的無黑白上限:

const randomInt = (min, max) => Math.floor(Math.random() * (最大-最小)) + 1 + min;
randomInt(10,20);

// 所有這些 Math.method() 都會進行型別強制轉換。
數學.trunc(25.4); // 25
數學.round(25.4); // 25
數學.floor(25.4); // 25
數學.ceil(25.4); // 26

對於負數,Math.floor 是更好的選擇。

Math.trunc(-25.4); // -25
數學.floor(-25.4); // -26

// 四捨五入小數:.toFixed 傳回字串,而不是數字
(2.5).toFixed(0); // '3'
(2.5).toFixed(3); // '2.500'
(2.345).toFixed(2); // '2.35'

// 增加一元 + 符號將其轉換為數字。
+(2.345).toFixed(2); // 2.35

// Number 是一個原語,因此它們沒有方法。所以在幕後,JS會進行裝箱,即將原始物件轉換為無對象,執行操作,然後當操作完成時,將其轉換回原始物件。

模數或餘數運算子:

5%2; // 1

8 % 3; // 2
8 / 3; // 2.6666666666666665

// 奇數或偶數
const isEven = n =>; n%2 === 0;
isEven(20);
isEven(21);
isEven(22);

用例:用於處理所有奇數行、偶數行、第 n 次等

數字分隔符號:[ES2021]

用來表示非常大的數字
這些是可以放置在數字之間的下劃線。引擎會忽略這些底線,減少開發人員的困惑。
前任。常量直徑 = 287_460_000_000;
直徑; // 287460000000

消費價格 = 342_25;
價格; // 34225

服務費1 = 1_500;
常量費用2 = 15_00;
費用1 === 費用2; // true

底線只能放在數字之間。
它不能與小數點相鄰。
它也不能放在編號的開頭或結尾。

const PI = 3.14_15;
PI; // 3.1415

全部都是無效的數字分隔符號範例

const PI = 3.1415; // 不能放在開頭。
const PI = 3.1415
; // 不能放在最後
常數 PI = 3_.1415; // 不能與小數點相鄰放置。
const PI = 3.1415; // 不能與小數點相鄰放置。
const PI = 3.
_1415; // 不能連續放置兩個。

將字串轉換為數字:

數字('2500'); // 2500
數字('25_00'); // NaN ,因此我們只能在直接將數字分配給變數時使用。因此,如果字串中儲存了“否”或從 API 中獲取了“否”,則為避免錯誤,請勿使用“_”數字分隔符號。
parseInt 也類似,即 _ 之後的任何內容都會被丟棄,如下所示:
parseInt('25_00'); // 25

大整型

特殊類型的整數,在 ES2020 中引入
數字在內部表示為 64 位,即 64 個 1 或 0 來表示任何數字。僅53位用於儲存數字,其餘用於儲存小數點位置和符號。因此,數字的大小有限制,即 ((2*53) - 1)。這是 JS 可以放心代表的最大的「否」。基數是 2,因為我們在儲存時以二進位形式工作。
2
*53 - 1; // 9007199254740991
Number.MAX_SAFE_INTEGER; // 9007199254740991

任何大於此的東西都是不安全的,即它無法準確表示。對於大於此值的數字,精確度將會遺失,如最後一位數字所示。有時可能有效,有時則無效。
Number.MAX_SAFE_INTEGER + 1; // 9007199254740992
Number.MAX_SAFE_INTEGER + 2; // 9007199254740992
Number.MAX_SAFE_INTEGER + 3; // 9007199254740994
Number.MAX_SAFE_INTEGER + 4; // 9007199254740996

如果我們從比這個大的 API 得到一個更大的 no,那麼 JS 將無法處理它。為了解決上述問題,ES2020 中引入了 BigInt 一種新的原始資料類型。這可以儲存我們想要的任意大小的整數。

在 no 末尾加上「n」以使其成為 BigInt。例如
const num = 283891738917391283734234324223122313243249821n;
數量; // 283891738917391283734234324223122313243249821n

BigInt 是顯示如此巨大數字的 JS 方式。
另一種使用建構子 Fn 來建立 BigInt 數字的方法。
const x = BigInt(283891738917391283734234324223122313243249821);
x; // 283891738917391288062871194223849945790676992n

操作:所有算術運算子與 BigInt 的工作原理相同;
const x = 100n + 100n;
x; // 200n

const x = 10n * 10n;
x; // 100n

避免將 BigInt 數字與常規數字混合

const x = 100n;
const y = 10;
z = x*y; // 錯誤

要使其運作,請使用 BigInt 建構子 Fn:
z = x * BigInt(y);
z; // 1000n

比較運算子和一元 + 運算子是例外。

20n> 19; // true
20n === 20; // false, === 阻止 JS 進行類型強制。 LHS 和 RHS 都有不同的原始類型,因此結果為「false」。

型別為 20n; // 'bigint'
類型20; // '數字'

20n == 20; // true,因為 JS 透過將 BigInt 轉換為常規數字進行類型強制,僅比較值而不比較類型。
同樣的情況也適用: 20n == '20'; // true

例外:

使用 + 運算子時,BigInt 數字不會轉換為字串。
const num = 248923874328974239473829n
「num 很大,即」 + num; // 'num 很大,即 248923874328974239473829'

注意:
Math.sqrt 不適用於 BigInt。
在 BigInt 的除法過程中,它會丟棄小數部分。
10 / 3; // 3.3333333333333335
10n/3n; // 3n
12n/3n; // 4n

這個新的原始類型為 JS 語言添加了一些新功能,使其可以處理大量的資料。

以上是數學命名空間和 BigInt的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!