Math 名前空間と BigInt

DDD
DDDオリジナル
2024-09-13 22:19:32572ブラウズ

Math Namespace & BigInt

Math.sqrt つまり、sqrt は Math 名前空間の一部です。

// 平方根を求める 2 つの方法。
Math.sqrt(100); // 10、方法 1
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)); // 領域を取得

no b/w 1-6 を生成します。

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

上限と下限を区別しないランダムな値を生成します。

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

// これらの Math.method() はすべて型強制を行います。
Math.trunc(25.4); // 25
Math.round(25.4); // 25
Math.floor(25.4); // 25
Math.ceil(25.4); // 26

Math.floor は負の数の場合に適した選択肢です。

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

// 小数点以下の四捨五入: .toFixed は数値ではなく文字列を返します
(2.5).toFixed(0); // '3'
(2.5).toFixed(3); // '2.500'
(2.345).toFixed(2); // '2.35'

// 単項記号を追加して no に変換します。
(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
; // 最後には配置できません。
const PI = 3_.1415; // 小数点の隣には配置できません。
const PI = 3.1415; // 小数点の隣には配置できません。
const PI = 3.
_1415; // 2 つ続けて配置することはできません。

文字列を数値に変換する:

数値('2500'); // 2500
数値('25_00'); // NaN 、したがって、数値が変数に直接割り当てられる場合にのみ使用できます。したがって、文字列に no が格納されている場合、または API から no を取得している場合は、エラーを避けるために、数値区切り文字「_」を使用しないでください。
同様のことが parseInt にも当てはまります。つまり、以下に示すように _ 以降はすべて破棄されます。 parseInt('25_00'); // 25

BigInt

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 が導入されました。これにより、必要なだけ大きな整数を保存できます。

BigInt にするために、no の末尾に「n」が追加されます。例
const num = 283891738917391283734234324223122313243249821n;
数字; // 283891738917391283734234324223122313243249821n

BigInt は、このような巨大な数値を表示するための JS 方法です。
BigInt 数値を作成するために Constructor Fn を使用する別の方法。
const x = BigInt(283891738917391283734234324223122313243249821);
×; // 283891738917391288062871194223849945790676992n

演算: すべての算術演算子は BigInt と同じように機能します。
const x = 100n 100n;
×; // 200n

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

BigInt 数値と通常の数値を混在させないでください

const x = 100n;
const y = 10;
z = x*y; // エラー

これを機能させるには、BigInt コンストラクター Fn を使用します。
z = x * BigInt(y);
z; // 1000n

比較演算子と単項演算子は例外です。

20分> 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 言語にいくつかの新しい機能を追加し、巨大な言語でも動作できるようにします。

以上がMath 名前空間と BigIntの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。