تابع is_float() در PHP
در زبان PHP برای کار با انواع دادهای، توابعی وجود دارند که نوع متغیر را بررسی میکنند. یکی از این توابع is_float() است که بررسی میکند آیا یک متغیر دقیقاً از نوع float (یا double در اصطلاحهای گذشته) هست یا خیر. در این مقاله به صورت جامع کاربردها، تفاوتها، نکات دقیق و نمونههای عملی مربوط به is_float() را بررسی میکنیم.
چیست و چه کاری انجام میدهد؟
تابع is_float($var) مقدار بولی بازمیگرداند: اگر $var از نوع float باشد، مقدار true و در غیر اینصورت false بازگردانده میشود. توجه کنید که این تابع فقط نوع متغیر را بررسی میکند، نه اینکه آیا مقدار قابل تفسیر به عدد اعشاری است یا خیر.
مقایسه با توابع مشابه
- is_double() و is_real(): این دو تابع، آلایس (alias) برای is_float() هستند و عملکرد یکسانی دارند.
- is_numeric(): بررسی میکند که آیا مقدار به صورت عددی قابل تعبیر است (مثلاً رشته “3.14” هم عددی محسوب میشود). اما is_float(“3.14”) برابر false خواهد بود چون نوع متغیر string است.
- is_int(): بررسی نوع صحیح (integer) را انجام میدهد؛ تفاوت آن با is_float واضح است.
نمونههای عملی و مثالها
// مثالهای پایهای با is_float
$values = [3.14, 5, "7.2", 0.0/0.0, INF, null, true];
foreach ($values as $v) {
var_dump($v);
var_dump(is_float($v));
echo "----n";
}
در این مثال، خروجی var_dump و is_float به صورت زیر خواهد بود (خلاصه):
- 3.14 -> is_float true
- 5 -> is_float false (نوع integer)
- “7.2” -> is_float false (نوع string)
- NAN -> is_float true (NAN هم یک float است)
- INF -> is_float true (INF نیز از نوع float است)
- null/true -> false
توضیح: مقادیر خاصی مثل NAN و INF در PHP به عنوان float شناخته میشوند، بنابراین is_float برای آنها true برمیگرداند.
مثال: تفاوت is_numeric() و is_float()
// تفاوت بین is_numeric و is_float
$examples = ["3.14", 3.14, "123", 123];
foreach ($examples as $e) {
echo "value: ";
var_dump($e);
echo "is_numeric: "; var_dump(is_numeric($e));
echo "is_float: "; var_dump(is_float($e));
echo "is_int: "; var_dump(is_int($e));
echo "----n";
}
توضیح: در این کد، رشته “3.14” برای is_numeric برابر true است اما is_float آن false است، چون نوع متغیر رشته است. اگر نیاز دارید بدانید آیا مقدار به عدد اعشاری تبدیل میشود، از is_numeric استفاده کنید یا آن را به float تبدیل کنید.
روشهای تبدیل و اعتبارسنجی مقدار به float
اگر با ورودی کاربر مواجه هستید و میخواهید بدانید مقدار اعشاری معتبر است یا آن را به float تبدیل کنید، میتوانید از چند روش استفاده کنید:
- استفاده از (float) یا floatval() برای تبدیل مستقیم
- استفاده از filter_var با FILTER_VALIDATE_FLOAT برای اعتبارسنجی
- استفاده از is_numeric و سپس تبدیل
// نمونه تبدیل و اعتبارسنجی
$input = "12.34";
if (is_numeric($input)) {
$f = (float)$input; // یا floatval($input)
var_dump($f); // float(12.34)
}
// استفاده از filter_var
if (filter_var($input, FILTER_VALIDATE_FLOAT) !== false) {
echo "Valid floatn";
} else {
echo "Not a valid floatn";
}
توضیح: filter_var با FILTER_VALIDATE_FLOAT بررسی میکند که آیا رشته قابل قبول به عنوان یک float است یا خیر و در صورت موفقیت مقدار (یا true/filtered value) بازمیگرداند؛ اگر ناموفق باشد false برمیگرداند.
نکات فنی و دامها
- is_float فقط نوع داده را بررسی میکند؛ بنابراین رشتههایی که نماینده عدد هستند را false گزارش میکند.
- مقادیر NaN و INF از نوع float هستند و is_float برای آنها true برمیگرداند.
- مقایسه مستقیم اعداد اعشاری مشکلساز است (مسئله دقت شناور). برای مقایسه از تفاوت مطلق (epsilon) استفاده کنید.
- در هنگام دریافت ورودی از کاربر، ابتدا اعتبارسنجی (is_numeric یا filter_var) انجام دهید و سپس تبدیل کنید تا از خطاهای منطقی جلوگیری شود.
مثال حرفهای: مقایسه اعشاری با epsilon
// مقایسه اعداد اعشاری با استفاده از epsilon
function float_equal(float $a, float $b, float $eps = 1e-9): bool {
return abs($a - $b) < $eps;
}
$a = 0.1 + 0.2;
$b = 0.3;
var_dump($a === $b); // false
var_dump(float_equal($a, $b)); // true
توضیح: این تابع نشان میدهد که حتی اگر متغیرها از نوع float باشند، مقایسه دقیق ممکن است به دلیل خطای شناور به false بیانجامد؛ بنابراین برای مقایسههای منطقی از epsilon استفاده کنید.
جدول مقایسه مختصر
| تابع | هدف | مثال |
|---|---|---|
| is_float() | بررسی نوع float | is_float(3.14) => true |
| is_numeric() | بررسی اینکه مقدار عددی یا قابل تبدیل به عدد است | is_numeric(“3.14”) => true |
| filter_var(…, FILTER_VALIDATE_FLOAT) | اعتبارسنجی فرمت اعشاری (قابل استفاده برای ورودی) | filter_var(“12.3”, FILTER_VALIDATE_FLOAT) !== false |
بهترین شیوهها و جمعبندی
- برای تشخیص نوع دقیق از is_float استفاده کنید، اما برای اعتبارسنجی ورودیهای متنی is_numeric یا filter_var مناسبتر است.
- برای تبدیل رشتهها به float از (float) یا floatval استفاده کنید و سپس با is_float میتوانید بررسی کنید که اکنون از نوع float شدهاند.
- در مقایسههای حساس از روش epsilon استفاده کنید تا خطاهای نمایشی شناور تأثیر نگذارد.
در مجموع، is_float تابعی ساده و مشخص برای تشخیص نوع داده float است، اما در طراحی ورودی و اعتبارسنجی بهتر است آن را همراه با ابزارهای دیگر مانند is_numeric، filter_var و روشهای تبدیل استفاده کنید تا برنامهای مقاوم و صحیح ایجاد کنید.
آیا این مطلب برای شما مفید بود ؟



