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"));خروجی:
25parseInt میتواند قسمت ابتدایی عدد را از چنین 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));خروجی:
trueNumber.isFinite
گاهی لازم است بررسی کنیم مقدار یک عدد محدود و معتبر است.
برای این کار:
Number.isFinite()را داریم.
مثال:
console.log(Number.isFinite(100));خروجی:
trueاما:
console.log(Number.isFinite(Infinity));خروجی:
falseInfinity
جاوااسکریپت مقدار ویژهای به نام 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
InfinityNumber.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 | مثال | نتیجه |
|---|---|---|
|
| 4 |
|
| 5 |
|
| 4 |
|
| 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));خروجی:
7Spread 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 | کاربرد |
|---|---|
| گرد کردن به نزدیکترین عدد صحیح |
| گرد کردن به سمت پایین |
| گرد کردن به سمت بالا |
| حذف بخش اعشاری |
| قدرمطلق |
| بزرگترین عدد |
| کوچکترین عدد |
| جذر |
| توان |
| عدد شبهتصادفی |
| مقدار π |
اشتباهات رایج
۱. اشتباه گرفتن 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 باید:
قیمت اولیه را دریافت کند.
درصد تخفیف را محاسبه کند.
قیمت پس از تخفیف را به دست آورد.
مالیات را روی قیمت پس از تخفیف محاسبه کند.
قیمت نهایی را برگرداند.
مثلاً:
console.log(
calculateFinalPrice(5000000, 20, 9)
);برنامه باید قیمت نهایی را محاسبه کند.
جمعبندی
در این مقاله با Number و Math در جاوااسکریپت آشنا شدیم.
یاد گرفتیم:
Number چیست.
اعداد صحیح و اعشاری چگونه کار میکنند.
محاسبات ریاضی با Number.
عملگر
%.محاسبه توان با
**.تبدیل String به Number.
Number.parseInt.Number.parseFloat.Number.isNaN.Number.isFinite.NaNوInfinity.محدودههای Number.
Math.PIMath.roundMath.floorMath.ceilMath.truncMath.absMath.powMath.sqrtMath.maxوMath.minMath.randomتولید عدد تصادفی در یک بازه.
toFixedمشکلات دقت اعداد اعشاری.
استفاده از Number و Math در مثالهای واقعی مانند تخفیف، مالیات، میانگین و قیمت.
نظرات
هنوز نظری ثبت نشده است.