اع

اعداد در JavaScript

20 تمرین

درباره‌ی اعداد

در JavaScript دو نوع متفاوت عدد وجود دارد: اعداد و bigintها.

اعداد پرکاربردترین‌اند و نوع داده‌ی عددی را در قالب ممیز شناور دقت مضاعف ۶۴ بیتی نمایش می‌دهند.

  • number: یک نوع داده‌ی عددی در قالب ممیز شناور دقت مضاعف ۶۴ بیتی (IEEE 754). برای مثال -6، -2.4، 0، 0.1، 1، 3.14، 16.984025، 25، 976، 1024.0 و 500000.
  • bigint: یک نوع داده‌ی عددی که می‌تواند اعداد صحیح را در قالب دقت دلخواه نمایش دهد. برای مثال -12n، 0n، 4n و 9007199254740991n.
let numericValue = 42;
// => 42

یک عدد ثابت مانند 42 در کد JavaScript یک مقدار ممیز شناور است، نه یک عدد صحیح. نوع جداگانه‌ای برای اعداد صحیح در استفاده‌ی روزمره‌ی معمول وجود ندارد. نوع bigint طوری طراحی نشده که در کاربردهای روزمره جایگزین نوع number شود. 42 همچنان یک Number است، نه BigInt.

اعداد را می‌توان به شکل‌های ثابتی مانند 0b101، 0o13 و 0x0A هم نوشت. درباره‌ی دستور واژگانی اعداد اینجا بیشتر بدانید.

نشانه‌گذاری‌های ویژه

نشانه‌گذاری نمایی

نشانه‌گذاری E عددی را نشان می‌دهد که باید در ۱۰ به توان یک مقدار معین ضرب شود. قالب نشانه‌گذاری E این است: یک عدد، سپس e یا E، و بعد توان ۱۰ که در آن ضرب می‌شود.

const num = 3.125e7;
// => 31250000
// The notation essentially says, "Take 3.125 and multiply it by 10^7".

از نشانه‌گذاری E می‌توان برای نمایش اعداد خیلی کوچک هم استفاده کرد:

const num = 325987e-6; // Equals 0.325987
// The notation essentially says, "Take 325987 and multiply it by 10^-6.

نشانه‌گذاری زیرخط

می‌توان از زیرخط استفاده کرد تا خواندن اعداد بزرگ برای کاربر راحت‌تر شود. کامپایلر زیرخط‌ها را کاملاً نادیده می‌گیرد.

const num = 1_000_000; // You can read this as 1,000,000
console.log(num);
// => 1000000

شیء توکار

دو شیء توکار وجود دارد که هنگام کار با اعداد مفیدند:

Math متدهایی برای گرد کردن اعداد هم دارد. می‌توانید درباره‌ی گزینه‌های گرد کردن موجود در این مقاله‌ی javascript.info درباره‌ی گرد کردن بیشتر بخوانید.

Math.floor(234.34); // => 234
Math.ceil(234.34); // => 235

object سراسری توکار Number همچنین یک function سراسری است که می‌توان از آن برای تبدیل تقریباً هر آنچه شبیه عدد است به یک number استفاده کرد. این کار از تجزیه‌ی یک string به number سخت‌گیرتر است.

const date = new Date('December 17, 1995 03:24:00');
const unix = Number(date);

unix;
// => 819199440000

سه نوع مقدار بیشینه (و کمینه / بیشینه‌ی منفی) برای اعداد در JavaScript وجود دارد:

  • VALUE: که با Number.MAX_VALUE و Number.MIN_VALUE داده می‌شود
  • INFINITY: که با Number.POSITIVE_INFINITY و Number.NEGATIVE_INFINITY داده می‌شود
  • SAFE_INTEGER: که با Number.MAX_SAFE_INTEGER و Number.MIN_SAFE_INTEGER داده می‌شود

به‌دلیل نحوه‌ی پیاده‌سازی اعداد در JavaScript، نه هر عددی بین Number.MIN_VALUE و Number.MAX_VALUE قابل نمایش است. اما هر عددی بین Number.MIN_SAFE_INTEGER - 1 و Number.MAX_SAFE_INTEGER + 1 قابل نمایش است.

مقادیر ویژه‌ی اعداد

JavaScript چند مقدار عددی ویژه دارد:

  • دو مقدار خطا: NaN و Infinity.
  • دو مقدار برای صفر: +0 و -0.

NaN - عدد نیست

مقدار خطای NaN (که «عدد نیست» نامیده می‌شود) در موارد زیر تولید می‌شود.

  • عددی قابل تجزیه نبود:
    Number('123'); // => 123
    Number('Hello, World!'); // => NaN
    
  • یک عملیات شکست خورد:
    Math.sqrt(-64); // => NaN
    
  • یکی از عملوندها NaN است:
    NaN + 69; // => NaN
    

NaN تنها مقداری است که با خودش برابر نیست:

NaN === NaN; // => false

اگر می‌خواهید بررسی کنید که آیا مقداری NaN است، باید از تابع سراسری isNaN() استفاده کنید:

isNaN(NaN); // => true
isNaN(123); // => false

Infinity

Infinity یک مقدار خطاست که یکی از دو مشکل را نشان می‌دهد:

  • عددی به‌دلیل بزرگ بودن بیش از حد قدرش قابل نمایش نیست.
    Math.pow(2, 1024); // => Infinity
    
  • تقسیم بر صفر رخ داده است.
    6 / 0; // => Infinity
    -6 / 0; // => -Infinity
    

Infinity از هر عدد دیگری بزرگ‌تر است (به‌جز NaN). به‌همین‌ترتیب، -Infinity از هر عدد دیگری کوچک‌تر است (به‌جز NaN)

تابع سراسری isFinite() به شما امکان می‌دهد بررسی کنید که آیا مقداری یک عدد واقعی است یا نه (نه بی‌نهایت و نه NaN):

isFinite(80085); // => true
isFinite(Infinity); // => false
isFinite(NaN); // => false

دو صفر

+0 و -0 در JavaScript دو عدد متمایزند. این‌ها زمانی تولید می‌شوند که عددی را نمایش داده باشید که آن‌قدر کوچک است که از ۰ قابل تشخیص نیست. صفر علامت‌دار به شما امکان می‌دهد ثبت کنید که «از کدام جهت» به صفر نزدیک شده‌اید؛ یعنی عدد پیش از آن‌که صفر در نظر گرفته شود چه علامتی داشت. بهترین کار این است که فرض کنید فقط یک صفر وجود دارد.

مقایسه

اعداد اگر مقدار یکسانی داشته باشند برابر در نظر گرفته می‌شوند.

1 == 1.0;
// => true

1 === 1.0;
// => true
// Remember, all numbers are floating-points, so this is
// different syntax for the exact same value.

1 === 1n;
// => false
// Strictly checking a number against a bigint will always result
// in false.

برای اطلاعات بیشتر درباره‌ی مقایسه به‌طور کلی و مقایسه‌ی مقادیر عددی در JavaScript، مقایسه را ببینید.

دام‌ها

چون اعداد در JavaScript ممیز شناور هستند، تمام محاسبات ریاضی با این مقادیر هم ممیز شناور است. بنابراین، در JavaScript:

0.1 + 0.2 === 0.3;
// => false

برای توضیحی کوتاه، 0.30000000000000004.com را ببینید و برای توضیحی عمیق، پیوست D از راهنمای محاسبات عددی اوراکل، «آنچه هر دانشمند رایانه باید درباره‌ی حساب ممیز شناور بداند»، را ببینید.

ویرایش از طریق GitHub این پیوند در پنجره یا زبانه‌ی جدیدی باز می‌شود

اعداد را یاد بگیرید

تمرین کردن قفل شده است

برای تمرین اعداد قفل 1 تمرین دیگر را باز کنید