ホームページ  >  記事  >  ウェブフロントエンド  >  Math 名前空間と BigInt

Math 名前空間と BigInt

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

Math Namespace & BigInt

Math.sqrt, 즉 sqrt는 Math 네임스페이스의 일부입니다.

// 제곱근을 구하는 2가지 방법
Math.sqrt(100); // 10, 방법 1
100*(1/2); // 10, 방법 2
8
*(1/3); // 2, 3차근에도 작동합니다

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 = (최소, 최대) => 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'

// 단항 + 기호를 추가하여 아니오로 변환합니다.
+(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]

매우 큰 숫자를 나타내는 데 사용됩니다
숫자 사이에 들어갈 수 있는 밑줄입니다. 엔진은 이러한 밑줄을 무시하므로 개발자의 혼란이 줄어듭니다.
전. const 직경 = 287_460_000_000;
지름; // 287460000000

정가 = 342_25;
가격; // 34225

const fee1 = 1_500;
const fee2 = 15_00;
수수료1 === 수수료2; //참

밑줄은 숫자 사이에만 넣을 수 있습니다.
소수점 옆에 위치할 수 없습니다.
또한 번호의 시작이나 끝에 위치할 수 없습니다.

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 , 따라서 변수에 숫자를 직접 할당할 때만 사용할 수 있습니다. 따라서 문자열에 아니요가 저장되어 있거나 API에서 아니요를 얻는 경우 오류를 방지하려면 '_' 숫자 구분 기호를 사용하지 마세요.
parsInt도 마찬가지입니다. 즉, _ 이후의 모든 항목은 아래와 같이 삭제됩니다.
ParseInt('25_00'); // 25

BigInt

ES2020에 도입된 특수 유형의 정수
숫자는 내부적으로 64비트, 즉 64개의 1 또는 0으로 표시되어 모든 숫자를 나타냅니다. 53개만 숫자를 저장하는 데 사용되고 나머지는 소수점 위치와 부호를 저장하는 데 사용됩니다. 따라서 숫자의 크기에는 제한이 있습니다((2*53) - 1). 이는 JS가 안전하게 나타낼 수 있는 가장 큰 아니오입니다. 저장하는 동안 바이너리 형식으로 작업하기 때문에 밑수는 2입니다.
2
*53 - 1; // 9007199254740991
번호.MAX_SAFE_INTEGER; // 9007199254740991

이보다 큰 것은 안전하지 않습니다. 즉, 정확하게 표현할 수 없습니다. 마지막 숫자에 표시된 것처럼 이보다 큰 숫자의 경우 정밀도가 손실됩니다. 때로는 작동할 수도 있고 때로는 작동하지 않을 수도 있습니다.
숫자.MAX_SAFE_INTEGER + 1; // 9007199254740992
번호.MAX_SAFE_INTEGER + 2; // 9007199254740992
번호.MAX_SAFE_INTEGER + 3; // 9007199254740994
번호.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 までご連絡ください。