آموزش کار با اعداد در PHP و توابع ریاضی

در برنامه‌نویسی همیشه با اعداد سروکار داریم. اعداد در PHP به دو دسته کلی صحیح و اعشاری تقسیم می‌شوند. توابع ریاضی مختلفی برای کار با عددها در زبان PHP وجود دارد. در این آموزش با اعداد و ۱۸ تابع پرکاربرد آن‌ها آشنا می‌شویم.

اگر در اوایل راه یادگیری PHP هستید، بهتر است با ساختارهای داده‌ای و امکاناتی در کار با آن‌ها داریم را یاد بگیرید. در این آموزش موارد مختلفی برای کار با اعداد در PHP گفته می‌شود که شاید از همه آن‌ها همیشه استفاده نکنید، اما دانستن اینکه چه اختیاراتی دارید، به شما کمک می‌کند یک برنامه‌نویس خوب باشید.

اعداد در PHP

برای ذخیره کردن عددها در PHP مانند بسیاری از زبان‌های برنامه‌نویسی دیگر دو نوع کلی داریم:

  1. عدد صحیح
  2. عدد اعشاری

حداقل و حداکثر مقداری که می‌توان در این نوع‌های عددی قرار داد، بستگی به سیستم اجراکننده برنامه دارد. بنابراین کف و سقف اعداد در سیستم 32 بیتی و 64 بیتی متفاوت است.

علاوه بر این دو نوع، اعداد نامحدود و ناعدد نیز داریم. اعداد نامحدود اعداد بسیار بزرگی هستند که خارج از محدوده مقدار قابل نمایش در حالت صحیح و اعشار باشد. ناعددها نیز به مقادیر مبهم یا اشتباه گفته می‌شود که معمولاً در محاسبات به آن‌ها برمی‌خوریم.

در ادامه هر ۴ مورد را به طور جزئی‌تر یاد می‌گیریم و در بخش انتهایی چند نمونه از توابع ریاضیاتی عددی در PHP را بررسی می‌کنیم.

اعداد صحیح

به زبان ساده، عدد صحیح (Integer یا int) عددی است که بخش اعشاری ندارد؛ دقیقاً مشابه چیزی که در ریاضیات خوانده‌ایم. اعداد 2 و 768 و -14895 همگی صحیح هستند.

اعداد صحیح دارای ویژگی‌های زیر هستند:

  • این اعداد بدون علامت اعشار (.) بوده و حداقل باید دارای یک رقم باشند.
  • می‌توانند مثبت، منفی یا صفر باشند.
  • اعداد صحیح را می‌توان در سه فرمت مختلف تعریف کرد: ده‌دهی (decimal)، مبنای شانزده (hexadecimal) یا مبنای هشت (octal)

حداقل عددی که می‌توان به عنوان integer بر روی سیستم نمایش داد یا ذخیره کرد از متغیر ثابت PHP_INT_MAX و حداقل مقدار از متغیر PHP_INT_MIN محاسبه می‌شود. (ثابت PHP چیست ؟)

برای مثال، مقدار نوع عددی صحیح در PHP روی سیستم 64 بیتی به صورت زیر است:

حداقل و حداکثر عدد صحیح در سیستم 64 بیتی
حداقل و حداکثر عدد صحیح در سیستم 64 بیتی

اعداد خارج از محدوده اعداد صحیح در PHP (بزرگ‌تر از حداکثر یا کوچک‌تر از حداقل) به عنوان عدد اعشاری ذخیره می‌شوند.

اعداد اعشاری

عددی که دارای علامت اعشار است یک عدد اعشاری (float) در نظر گرفته می‌شود. متغیرهای مهم عدد اعشاری در PHP عبارت‌اند از:

  • PHP_FLOAT_MAX : بزرگ‌ترین مقدار قابل نمایش به شکل عدد اعشاری را مشخص می‌کند.
  • PHP_FLOAT_MIN : کوچک‌ترین مقدار قابل نمایش به عنوان عدد اعشاری را مشخص می‌کند.

یک مثال ساده، محاسبه معدل برای چند عدد است. در قطعه کد PHP زیر 3 عدد مختلف داریم. این اعداد را با هم جمع کرده و بر 3 تقسیم می‌کنیم تا میانگین اعداد به دست بیاید. در نهایت 17.08333 در خروجی چاپ می‌شود.

<?php
$x = 17;
$y = 14.75;
$z = 19.5;
$sum = $x + $y + $z;
echo $sum/3;
تعریف متغیرها و ۸ نوع داده‌ای متغیر در PHP

تعریف متغیرها و ۸ نوع داده‌ای متغیر در PHP

کار با عددها در PHP

برای کار با اعداد در PHP چند تابع کاربردی وجود دارد. همچنین دو نوع عدد نامحدود و ناعدد نیز برای تعریف مقادیر غیر از اعداد صحیح و اعشاری در نظر گرفته شده است.

برای اینکه بررسی کنیم آیا یک متغیر از نوع عدد صحیح است یا خیر، از تابع is_int() استفاده می‌کنیم. این تابع یک مقدار را به عنوان ورودی دریافت کرده و به صورت true یا false مشخص می‌کند که از نوع integer است یا خیر.

<?php
$x = 76954;
is_int($x);   // 1 or true

$x = 3.885;
is_int($x);   // 0 or false

به عنوان توابع اضافی، می‌توان از is_integer() یا is_long() نیز برای تشخیص صحیح بودن یک عدد در PHP استفاده کرد. عملکرد این سه تابع شبیه هم است.

به طور مشابه، تابع is_float() را داریم. این تابع یک مقدار به عنوان ورودی دریافت کرده و با true یا false مشخص می‌کند که آیا آن مقدار از نوع اعشاری است یا خیر.

<?php
$x = 39.721;
is_float($x);   // true

تابع is_double() نیز عملکرد مشابهی برای تشخیص اعداد اعشاری در PHP دارد.

از توابعی که خروجی آن‌ها به صورت true یا false است می‌توان برای کنترل جریان برنامه در عبارات شرطی PHP استفاده کرد.

عدد نامحدود در PHP

اعدادی که بزرگ‌تر از مقدار PHP_FLOAT_MAX هستند، به عنوان اعداد نامحدود (infinity) شناخته می‌شوند. در حقیقت چون امکان ذخیره‌سازی آن‌ها در سیستمی که در حال اجرای کد PHP شماست وجود ندارد، این اعداد به عنوان بی‌نهایت در نظر گرفته می‌شوند.

در قطع کد زیر یک عدد خیلی بزرگ را برای سیستم مشخص کردم تا به کمک var_dump() نوع آن را بررسی کنیم.

<?php
$x = 5.3e444;
var_dump($x);

نتیجه این کد چیزی شبیه خروجی زیر می‌شود. همانطور که می‌بینید عدد از نوع float تشخیص داده شده ولی مقدارش INF مخفف infinity است.

float(INF)

دو تابع زیر برای نامحدود بودن یا نبودن اعداد در PHP به کار می‌روند.

  • is_finite() : آیا عدد ورودی محدود است ؟
  • is_infinite() : آیا عدد ورودی نامحدود است ؟

ناعدد یا NaN

مقدار NaN در PHP (و حتی برخی زبان‌های دیگر) مخفف عبارت Not a Number است. این مقدار معمولاً برای نتیجه عملیات‌های ریاضی غیرممکن استفاده می‌شود. مثلاً فرض کنید بخواهیم مقدار سینوس معکوس عدد 25 را بگیریم. چون بازه سینوس (-1,1) است، بنابراین نتیجه آن ناممکن بوده و با NaN نشان داده می‌شود.

<?php
// NaN value
var_dump( asin(25) );
// float(NAN)

از تابع is_nan() برای بررسی ناعدد بودن یک مقدار در PHP استفاده می‌شود.

توابع ریاضی اعداد در PHP

مشابه اکثر زبان‌های سطح بالای دیگر، در PHP توابع مختلفی برای عملیات‌های ریاضی روی اعداد داریم. این توابع درونی هستند و برای استفاده از آن‌ها نیاز به وارد کردن هیچ کتابخانه‌ای به برنامه نیست.

پرکاربردترین توابع عددی و ریاضی

در جدول زیر ۱۰ تابع پر کاربرد ریاضی برای کار با اعداد PHP را مشاهده می‌کنید. اگر می‌خواهید با همه توابع ریاضی آشنا شوید، یک لیست کامل همراه با مثال‌های مختلفی در صفحه مستندات آن وجود دارد.

تابععملیات
rand()ایجاد یک عدد تصادفی
ceil(x)گرد کردن عدد رو به بالا
floor(x)گرد کردن عدد به پایین
round(x)گرد کردن عدد
abs(x)قدر مطلق عدد
pow(x, y)x به توان y
sqrt(x)جذر عدد
min()پیدا کردن مینیموم
max()پیدا کردن ماکزیموم

نکته: ورودی توابع min و max می‌تواند تعداد نامحدودی عدد (به صورت آرگومان) یا یک آرایه PHP باشد.

مثال: رند کردن اعداد در PHP

تابع ceil() یک ورودی عددی می‌گیرد و مقدار اعشار آن را به بالا گرد می‌کند. تابع floor() با گرد کردن عدد اعشاری به سمت پایین، مقدار کف عدد را به ما می‌دهد.

تابع round() ترکیبی از این دو کار را با هم انجام می‌دهد. به این صورت که اگر مقدار اعشار عددی بزرگ‌تر یا مساوی 0.5 باشد، عدد را به سمت بالا و در غیر اینصورت به سمت پایین گرد خواهد کرد.

به قطعه کد زیر دقت کنید:

<?php
echo "ceil: ";
echo ceil(2.1) . "   ";
echo ceil(2.8) . "<br>";

echo "floor: ";
echo floor(2.1) . "   ";
echo floor(2.8) . "<br>";

echo "round: ";
echo round(2.1) . "   ";
echo round(2.8);

/* output:
ceil: 3 3
floor: 2 2
round: 2 3
*/

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

امیدوارم در این آموزش به خوبی با اعداد در PHP آشنا شده باشید و بتوانید با توابع ریاضی، عملیات‌های کاربردی روی آن‌ها انجام دهید.