آکادمی بنو/آموزش JavaScript

Number و Math در جاوااسکریپت

بهنام نوبخت · ۱۴۰۵/۷/۱۱

در بسیاری از برنامه‌های جاوااسکریپت با اعداد (Numbers) سروکار داریم. قیمت محصولات، سن کاربران، امتیازها، تعداد کالاها، درصد تخفیف، نمره آزمون، مختصات، زمان‌ها و بسیاری از اطلاعات دیگر به صورت عددی در برنامه ذخیره می‌شوند.

جاوااسکریپت برای کار با اعداد از نوع داده‌ای Number استفاده می‌کند. علاوه بر آن، یک Object داخلی به نام Math دارد که مجموعه‌ای از ابزارهای کاربردی برای انجام محاسبات ریاضی در اختیار برنامه‌نویس قرار می‌دهد.

در این مقاله ابتدا با Number و نحوه کار با اعداد آشنا می‌شویم، سپس تبدیل String به Number، بررسی عدد، گرد کردن اعداد، حداقل و حداکثر، توان، جذر، عدد تصادفی و چند کاربرد عملی را بررسی خواهیم کرد.

Number چیست؟

در جاوااسکریپت نوع داده Number برای نگهداری اعداد استفاده می‌شود.

مثلاً:

const age = 25;
const price = 1500000;
const score = 18.5;

می‌توانیم نوع داده را بررسی کنیم:

console.log(typeof age);

خروجی:

number

هم اعداد صحیح و هم اعداد اعشاری معمولاً از نوع number هستند.

مثال:

const integerNumber = 100;
const decimalNumber = 12.5;

console.log(typeof integerNumber);
console.log(typeof decimalNumber);

خروجی:

number
number

اعداد صحیح

اعداد بدون بخش اعشاری را می‌توانیم به صورت معمول استفاده کنیم:

const count = 10;
const age = 25;
const price = 500000;

اعداد اعشاری

برای نگهداری عدد اعشاری از . استفاده می‌کنیم:

const price = 19.99;
const temperature = 23.5;
const score = 18.75;

مثال:

const result = 10.5 + 2.5;

console.log(result);

خروجی:

13

انجام محاسبات با Number

می‌توانیم از عملگرهای ریاضی استفاده کنیم.

const a = 20;
const b = 5;

console.log(a + b);
console.log(a - b);
console.log(a * b);
console.log(a / b);
console.log(a % b);

خروجی:

25
15
100
4
0

باقی‌مانده با %

عملگر % باقی‌مانده تقسیم را برمی‌گرداند.

مثلاً:

console.log(10 % 3);

خروجی:

1

زیرا:

10 ÷ 3 = 3
remainder = 1

این عملگر کاربردهای زیادی دارد.

بررسی زوج یا فرد

برای بررسی زوج یا فرد بودن عدد می‌توانیم بنویسیم:

const number = 15;

if (number % 2 === 0) {
    console.log("زوج");
} else {
    console.log("فرد");
}

خروجی:

فرد

اگر عدد 16 باشد:

زوج

توان با **

در جاوااسکریپت می‌توانیم از ** برای محاسبه توان استفاده کنیم.

console.log(2 ** 3);

خروجی:

8

زیرا:

2 × 2 × 2 = 8

مثال:

const result = 5 ** 2;

console.log(result);

خروجی:

25

تبدیل String به Number

یکی از مهم‌ترین کارها هنگام کار با داده‌های ورودی، تبدیل String به Number است.

مثلاً:

const value = "100";

console.log(typeof value);

خروجی:

string

اگر بخواهیم آن را به Number تبدیل کنیم:

const number = Number(value);

console.log(number);
console.log(typeof number);

خروجی:

100
number

مشکل محاسبه با String

فرض کنید:

const a = "10";
const b = "20";

console.log(a + b);

خروجی:

1020

زیرا هر دو مقدار String هستند و + آن‌ها را به هم متصل می‌کند.

اما اگر تبدیل کنیم:

const a = Number("10");
const b = Number("20");

console.log(a + b);

خروجی:

30

این موضوع هنگام دریافت اطلاعات از فرم‌ها اهمیت زیادی دارد.

Number.parseInt

متد parseInt برای تبدیل یک مقدار به عدد صحیح استفاده می‌شود.

مثال:

const value = "25";

const number = Number.parseInt(value);

console.log(number);

خروجی:

25

اگر String شامل بخش اعشاری باشد:

const value = "25.75";

console.log(Number.parseInt(value));

خروجی:

25

چون parseInt بخش اعشاری را در نتیجه نگه نمی‌دارد.

Number.parseFloat

برای تبدیل مقدار به عدد اعشاری می‌توانیم از parseFloat استفاده کنیم.

const value = "25.75";

const number = Number.parseFloat(value);

console.log(number);

خروجی:

25.75

تفاوت Number و parseInt

این دو روش همیشه رفتار یکسانی ندارند.

مثلاً:

console.log(Number("25px"));

خروجی:

NaN

اما:

console.log(Number.parseInt("25px"));

خروجی:

25

parseInt می‌تواند قسمت ابتدایی عدد را از چنین Stringهایی استخراج کند.

برای داده‌های ورودی، بهتر است بر اساس نیاز برنامه تصمیم بگیریم که کدام روش مناسب است.

Number.isNaN

گاهی نتیجه یک عملیات عددی NaN می‌شود.

NaN مخفف:

Not a Number

است.

مثلاً:

const result = Number("hello");

console.log(result);

خروجی:

NaN

برای بررسی اینکه یک مقدار دقیقاً NaN است، می‌توانیم از:

Number.isNaN()

استفاده کنیم.

مثال:

const value = Number("hello");

console.log(Number.isNaN(value));

خروجی:

true

Number.isFinite

گاهی لازم است بررسی کنیم مقدار یک عدد محدود و معتبر است.

برای این کار:

Number.isFinite()

را داریم.

مثال:

console.log(Number.isFinite(100));

خروجی:

true

اما:

console.log(Number.isFinite(Infinity));

خروجی:

false

Infinity

جاوااسکریپت مقدار ویژه‌ای به نام Infinity دارد.

مثلاً:

console.log(10 / 0);

خروجی:

Infinity

می‌توانیم بررسی کنیم:

console.log(Number.isFinite(10 / 0));

خروجی:

false

در برنامه‌های واقعی باید مراقب محاسباتی باشیم که ممکن است نتیجه غیرعادی ایجاد کنند.

NaN و Infinity

دو مقدار ویژه مهم:

NaN
Infinity

هستند.

مثال:

console.log(Number("abc"));
console.log(10 / 0);

خروجی:

NaN
Infinity

Number.MAX_VALUE

جاوااسکریپت یک مقدار بسیار بزرگ قابل نمایش به عنوان Number دارد که از طریق:

Number.MAX_VALUE

قابل دسترسی است.

مثال:

console.log(Number.MAX_VALUE);

این مقدار برای استفاده روزمره لازم نیست، اما آشنایی با آن در مباحث Number مفید است.

Number.MIN_VALUE

به صورت مشابه:

Number.MIN_VALUE

کوچک‌ترین مقدار مثبت غیرصفر قابل نمایش در محدوده Number را نشان می‌دهد.

نکته مهم این است که MIN_VALUE به معنی کوچک‌ترین عدد منفی نیست؛ بلکه یک مقدار مثبت بسیار نزدیک به صفر است.

Number.MAX_SAFE_INTEGER

جاوااسکریپت محدوده‌ای دارد که در آن اعداد صحیح را با دقت امن‌تری می‌توان نمایش داد.

این مقدار از طریق:

Number.MAX_SAFE_INTEGER

قابل دسترسی است.

مثال:

console.log(Number.MAX_SAFE_INTEGER);

برای اعداد صحیح بسیار بزرگ، باید موضوع دقت Number را جدی بگیریم و در صورت نیاز از BigInt استفاده کنیم که در مباحث پیشرفته‌تر می‌توانیم بررسی کنیم.

Math چیست؟

Math یک Object داخلی جاوااسکریپت است که مجموعه‌ای از ابزارهای ریاضی را در اختیار ما قرار می‌دهد.

مثلاً:

console.log(Math.PI);

مقدار تقریبی عدد π را نمایش می‌دهد.

همچنین:

console.log(Math.sqrt(25));

جذر عدد ۲۵ را محاسبه می‌کند.

Math.PI

برای مقدار π می‌توانیم از:

Math.PI

استفاده کنیم.

مثال:

console.log(Math.PI);

برای محاسبه محیط دایره:

const radius = 10;

const circumference = 2 * Math.PI * radius;

console.log(circumference);

متد Math.round

برای گرد کردن عدد به نزدیک‌ترین عدد صحیح از:

Math.round()

استفاده می‌کنیم.

مثال:

console.log(Math.round(4.4));
console.log(Math.round(4.6));

خروجی:

4
5

مثال دیگر:

console.log(Math.round(10.5));

خروجی:

11

متد Math.floor

Math.floor عدد را به سمت پایین گرد می‌کند.

console.log(Math.floor(4.9));

خروجی:

4

مثال:

console.log(Math.floor(10.99));

خروجی:

10

متد Math.ceil

Math.ceil عدد را به سمت بالا گرد می‌کند.

console.log(Math.ceil(4.1));

خروجی:

5

مثال:

console.log(Math.ceil(10.01));

خروجی:

11

تفاوت round، floor و ceil

Method

مثال

نتیجه

Math.round

Math.round(4.4)

4

Math.round

Math.round(4.6)

5

Math.floor

Math.floor(4.9)

4

Math.ceil

Math.ceil(4.1)

5

به صورت ساده:

round → نزدیک‌ترین عدد صحیح
floor → پایین
ceil  → بالا

متد Math.trunc

Math.trunc بخش اعشاری عدد را حذف می‌کند.

console.log(Math.trunc(4.9));

خروجی:

4

مثال:

console.log(Math.trunc(12.75));

خروجی:

12

در اعداد منفی نیز باید تفاوت آن را با Math.floor() در نظر بگیریم:

console.log(Math.trunc(-4.9));
console.log(Math.floor(-4.9));

خروجی:

-4
-5

متد Math.abs

برای دریافت مقدار قدرمطلق از:

Math.abs()

استفاده می‌کنیم.

مثال:

console.log(Math.abs(-10));

خروجی:

10

مثال عملی:

const difference = 20 - 35;

console.log(Math.abs(difference));

خروجی:

15

این روش برای محاسبه فاصله عددی بین دو مقدار کاربرد دارد.

متد Math.pow

برای محاسبه توان می‌توانیم از:

Math.pow()

استفاده کنیم.

مثال:

console.log(Math.pow(2, 3));

خروجی:

8

امروزه معمولاً استفاده از:

2 ** 3

خواناتر است، اما Math.pow همچنان وجود دارد.

متد Math.sqrt

برای محاسبه جذر از:

Math.sqrt()

استفاده می‌کنیم.

مثال:

console.log(Math.sqrt(25));

خروجی:

5

مثال دیگر:

console.log(Math.sqrt(81));

خروجی:

9

متد Math.max

برای پیدا کردن بزرگ‌ترین عدد:

Math.max()

استفاده می‌شود.

console.log(Math.max(10, 25, 7, 40, 18));

خروجی:

40

متد Math.min

برای پیدا کردن کوچک‌ترین عدد:

console.log(Math.min(10, 25, 7, 40, 18));

خروجی:

7

استفاده از Math.max با Array

اگر اعداد داخل Array باشند، می‌توانیم از Spread Operator استفاده کنیم:

const numbers = [10, 25, 7, 40, 18];

console.log(Math.max(...numbers));

خروجی:

40

و:

console.log(Math.min(...numbers));

خروجی:

7

Spread Operator را در مباحث جاوااسکریپت مدرن با جزئیات بیشتری بررسی خواهیم کرد.

متد Math.random

یکی از پرکاربردترین امکانات Math:

Math.random()

است.

این Method یک عدد تصادفی در بازه:

0 <= value < 1

تولید می‌کند.

مثلاً:

console.log(Math.random());

ممکن است نتیجه‌ای مانند:

0.472381

باشد.

هر بار اجرای برنامه می‌تواند مقدار متفاوتی تولید کند.

تولید عدد تصادفی بین ۰ و ۹

برای تولید عدد صحیح بین 0 تا 9:

const randomNumber = Math.floor(Math.random() * 10);

console.log(randomNumber);

نتیجه یکی از اعداد زیر خواهد بود:

0
1
2
3
4
5
6
7
8
9

تولید عدد تصادفی بین ۱ و ۱۰

اگر بخواهیم عددی بین 1 تا 10 تولید کنیم:

const randomNumber = Math.floor(Math.random() * 10) + 1;

console.log(randomNumber);

نتیجه می‌تواند هر عددی از:

1

تا:

10

باشد.

فرمول عدد تصادفی در یک بازه

برای تولید عدد صحیح بین min و max می‌توانیم از فرمول زیر استفاده کنیم:

Math.floor(Math.random() * (max - min + 1)) + min

مثال:

const min = 10;
const max = 20;

const randomNumber =
    Math.floor(Math.random() * (max - min + 1)) + min;

console.log(randomNumber);

عدد تولیدشده بین 10 و 20 خواهد بود.

ساخت Function برای عدد تصادفی

می‌توانیم این منطق را داخل Function قرار دهیم:

function randomInteger(min, max) {
    return Math.floor(
        Math.random() * (max - min + 1)
    ) + min;
}

استفاده:

console.log(randomInteger(1, 100));

هر بار یک عدد صحیح بین 1 و 100 دریافت می‌کنیم.

این Function می‌تواند در پروژه‌های مختلف مانند بازی‌های ساده، انتخاب تصادفی و تولید داده آزمایشی کاربرد داشته باشد.

مثال عملی: محاسبه تخفیف

فرض کنید قیمت محصول:

const price = 2000000;
const discountPercent = 15;

است.

مقدار تخفیف:

const discount =
    price * discountPercent / 100;

console.log(discount);

خروجی:

300000

قیمت نهایی:

const finalPrice = price - discount;

console.log(finalPrice);

خروجی:

1700000

می‌توانیم آن را در یک Function قرار دهیم:

function calculateDiscount(price, percent) {
    const discount = price * percent / 100;

    return price - discount;
}

console.log(calculateDiscount(2000000, 15));

خروجی:

1700000

مثال عملی: میانگین نمرات

فرض کنید:

const score1 = 18;
const score2 = 17;
const score3 = 19;

میانگین:

const average =
    (score1 + score2 + score3) / 3;

console.log(average);

خروجی:

18

اگر بخواهیم میانگین را گرد کنیم:

console.log(Math.round(average));

مثال عملی: فاصله بین دو عدد

فرض کنید:

const a = 25;
const b = 40;

فاصله عددی:

const distance = Math.abs(a - b);

console.log(distance);

خروجی:

15

مثال عملی: بزرگ‌ترین نمره

const score1 = 15;
const score2 = 19;
const score3 = 17;
const score4 = 20;

const highest = Math.max(
    score1,
    score2,
    score3,
    score4
);

console.log(highest);

خروجی:

20

مثال عملی: محاسبه قیمت نهایی

فرض کنید یک محصول قیمت و مالیات مشخصی دارد:

const price = 1000000;
const taxPercent = 9;

const tax = price * taxPercent / 100;
const finalPrice = price + tax;

console.log(finalPrice);

خروجی:

1090000

این یک مثال ساده برای درک محاسبات Number است.

گرد کردن قیمت

گاهی نتیجه یک محاسبه دارای تعداد زیادی رقم اعشار است.

مثلاً:

const result = 10 / 3;

console.log(result);

نتیجه تقریباً:

3.3333333333333335

است.

اگر فقط عدد صحیح بخواهیم:

console.log(Math.round(result));

خروجی:

3

اما اگر بخواهیم تعداد مشخصی رقم اعشار را نمایش دهیم، toFixed() نیز وجود دارد.

متد toFixed

متد:

toFixed()

برای نمایش عدد با تعداد مشخصی رقم اعشار استفاده می‌شود.

مثال:

const price = 12.34567;

console.log(price.toFixed(2));

خروجی:

12.35

نکته مهم این است که نتیجه toFixed() یک String است.

مثلاً:

const result = price.toFixed(2);

console.log(typeof result);

خروجی:

string

اگر برای ادامه محاسبات Number لازم داشته باشیم، باید آن را دوباره به Number تبدیل کنیم:

const result = Number(price.toFixed(2));

console.log(typeof result);

خروجی:

number

دقت اعشاری در جاوااسکریپت

هنگام کار با اعداد اعشاری باید به یک نکته مهم توجه کنیم.

مثلاً:

console.log(0.1 + 0.2);

ممکن است نتیجه:

0.30000000000000004

باشد.

این رفتار به نحوه نمایش اعداد اعشاری در سیستم‌های کامپیوتری مربوط است و فقط مخصوص جاوااسکریپت نیست.

بنابراین در محاسبات مالی حساس، نباید بدون توجه به این موضوع مستقیماً روی Numberهای اعشاری حساب کنیم.

برای نمایش عدد می‌توانیم در موارد ساده از روش‌هایی مانند:

const result = (0.1 + 0.2).toFixed(2);

console.log(result);

استفاده کنیم.

اما در سیستم‌های مالی واقعی، معمولاً باید روش مناسب‌تری برای مدیریت دقت انتخاب شود.

مقایسه مهم‌ترین امکانات Math

Method

کاربرد

Math.round

گرد کردن به نزدیک‌ترین عدد صحیح

Math.floor

گرد کردن به سمت پایین

Math.ceil

گرد کردن به سمت بالا

Math.trunc

حذف بخش اعشاری

Math.abs

قدرمطلق

Math.max

بزرگ‌ترین عدد

Math.min

کوچک‌ترین عدد

Math.sqrt

جذر

Math.pow

توان

Math.random

عدد شبه‌تصادفی

Math.PI

مقدار π

اشتباهات رایج

۱. اشتباه گرفتن String عددی با Number

این دو مقدار یکی نیستند:

"100"
100

اولی String و دومی Number است.

می‌توانیم بررسی کنیم:

console.log(typeof "100");
console.log(typeof 100);

۲. استفاده اشتباه از +

مثلاً:

console.log("10" + 20);

نتیجه:

1020

اگر محاسبه عددی می‌خواهیم:

console.log(Number("10") + 20);

نتیجه:

30

۳. اشتباه گرفتن floor و trunc

برای اعداد مثبت:

Math.floor(4.9);
Math.trunc(4.9);

هر دو 4 هستند.

اما برای اعداد منفی:

Math.floor(-4.9);
Math.trunc(-4.9);

نتایج متفاوت هستند:

-5
-4

۴. تصور اینکه Math.random عدد صحیح می‌دهد

این کد:

Math.random();

عدد صحیح نمی‌دهد.

مقدار آن معمولاً بین 0 و کمتر از 1 است.

برای عدد صحیح باید از ترکیب آن با Math.floor() استفاده کنیم.

۵. فراموش کردن اینکه toFixed String برمی‌گرداند

const result = (10 / 3).toFixed(2);

console.log(typeof result);

خروجی:

string

تمرین‌های مقاله

تمرین ۱ — محاسبات

دو Number ایجاد کنید و:

  • جمع

  • تفریق

  • ضرب

  • تقسیم

  • باقی‌مانده

آن‌ها را نمایش دهید.

تمرین ۲ — زوج و فرد

برنامه‌ای بنویسید که یک عدد را بررسی کند و مشخص کند زوج است یا فرد.

تمرین ۳ — گرد کردن

عدد زیر را در نظر بگیرید:

const number = 15.78;

نتیجه round، floor، ceil و trunc را نمایش دهید.

تمرین ۴ — بزرگ‌ترین و کوچک‌ترین

Array زیر را در نظر بگیرید:

const numbers = [12, 45, 7, 89, 23, 5];

با استفاده از Math.max و Math.min:

  • بزرگ‌ترین عدد

  • کوچک‌ترین عدد

را پیدا کنید.

تمرین ۵ — عدد تصادفی

یک عدد تصادفی بین 1 تا 100 تولید کنید.

تمرین ۶ — تخفیف

برنامه‌ای بنویسید که:

Price = 5,000,000
Discount = 20%

را دریافت کند و قیمت نهایی را محاسبه کند.

تمرین ۷ — میانگین

نمرات زیر را در نظر بگیرید:

const scores = [18, 15, 20, 17, 19];

میانگین نمرات را محاسبه کنید.

تمرین ۸ — Challenge

یک Function به نام:

calculateFinalPrice(price, discount, tax)

ایجاد کنید.

Function باید:

  1. قیمت اولیه را دریافت کند.

  2. درصد تخفیف را محاسبه کند.

  3. قیمت پس از تخفیف را به دست آورد.

  4. مالیات را روی قیمت پس از تخفیف محاسبه کند.

  5. قیمت نهایی را برگرداند.

مثلاً:

console.log(
    calculateFinalPrice(5000000, 20, 9)
);

برنامه باید قیمت نهایی را محاسبه کند.

جمع‌بندی

در این مقاله با Number و Math در جاوااسکریپت آشنا شدیم.

یاد گرفتیم:

  • Number چیست.

  • اعداد صحیح و اعشاری چگونه کار می‌کنند.

  • محاسبات ریاضی با Number.

  • عملگر %.

  • محاسبه توان با **.

  • تبدیل String به Number.

  • Number.parseInt.

  • Number.parseFloat.

  • Number.isNaN.

  • Number.isFinite.

  • NaN و Infinity.

  • محدوده‌های Number.

  • Math.PI

  • Math.round

  • Math.floor

  • Math.ceil

  • Math.trunc

  • Math.abs

  • Math.pow

  • Math.sqrt

  • Math.max و Math.min

  • Math.random

  • تولید عدد تصادفی در یک بازه.

  • toFixed

  • مشکلات دقت اعداد اعشاری.

  • استفاده از Number و Math در مثال‌های واقعی مانند تخفیف، مالیات، میانگین و قیمت.

۱۰

نظرات

کد در دسترس نیست

هنوز نظری ثبت نشده است.