دراين فصل بطور عميق به اعدادصحيح ،اعداد اعشاري واعداد رشته اي مي پردازيم. درphp هرگاه به متغيري عددي منتسب شود، نوع آن متغير، نوع آن عدد خواهدبود .بدين ترتيب چون انتساب محدويتي ندارد، ممكن است نوع متغير تعويض گردد .بدو دستور زير توجه كنيد.
با اجراي دستور اول نوغ متغير
بمثال زير توجه كنيد،تا درارتباط با مشكلات آن آشنا شويد، وبراي استفاده از تركيب نوع داده دقت نمائيد.
مثال
<?php $x=12; $y=25; echo $x+$y; //output 37 echo "<br>"; $y="25A"; echo $x+$y; //output 37 echo "<br>"; $y="Hello world!"; echo $x+$y; //output 12 ?>
اعداد 22456 , 89800 , 50 , -678989 همه ازنوعinteget هستند .هرعدد بدون اعشار، از نوع integerاست.
كمترين وبيشترين عدد صحيح بستگي به سيستم كامپيوتر دارد .درسيستمهاي32 بيتي حداكثر 2,147,483,648 وحداقل -2,147,483,647ميباشد.
درسيستم هاي 64 بيتي بين-9223372036854775808 و9223372036854775807ميباشد.
نكته ـ درعبارت 4*2.25 حاصل10 خواهد شد، اما با اينكه صحيح است، بعنوانfloat در نظر ميگيرد .اين بخاطر اينكه يكي از عوامل ضرب ازنوعfloat است.
بعضي از قوانين اعداد صحيح مطابق زيراست.
-1يك عدد صحيح حداقل يك رقم دارد.
-2عدد فاقد نقطه اعشاريست.
3ـ عدد ميتواند مثبت يا منفي باشد.
4ـ عدد ميتواند درمبناي ده،هشت وشانزده باشد .اگر مبنا ذكر نشود، ده فرض ميشود.
درPHP براي اعداد صحيح سه ثابت از پيش تعريف شده وجود دارد،مطابق زير
-1بزرگترين عدد سيستم كه پشتباني ميكندPHP_INT_MAX .
-2كوچكترين عددصحيحPHP_INT_MIN .
-3تعداد بايت مورد حمايت براي عدد صحيحPHP_INT_SIZE .
درphp سه تابع براي بررسي integer بودن متغير وجود دارد،كه كارمشابه اي انجام ميدهند،مطابق زير
مثال زير جهت بررسيinteger بودن متغير
<?php $x=5985; var_dump(is_int($x)); $x=59.85; var_dump(is_int($x)); $x=5985.0; var_dump(is_int($x)); ?>
عددي ازنوع شناورياfloat است كه داراي نقطه اعشاري ويا فرم تواني باشد .موارد زير ازنوع شناورند.
نوع داده شناور معمولا ميتواند تا 1.797691348623E+308 باشد.
ثابت هاي از پيش تعريف شده براي اعداد شناور ،كه از نسخهphp 7.2 به بعد ميباشد .
PHP_FLOAT_MAX -1بزرگتر عدد مميز دارشناور قابل نمايش
PHP_FLOAT_MIN -2كوچكترين عدد مميز دار شناورقابل نمايش
PHP_FLOAT_MAX -3كوچكترين عدد شناور منفي قابل نمايش
PHP_FLOAT_EPSILON -4كوچكترين عدد شناور مثبت قابل نمايش .عدد فوق با هر عددي جمع شود، نتيجه همان عدد ميشود، يعني در جمع مشابه عدد صفر عمل ميكند .اين عدد ثابت اپسيلون سيستم كامپيوتري دراعداد اعشاريست.
PHP_FLOAT_DIG -5تعداد ارقام اعشاري كه ميتواند، عدد اعشاري با دقت گرد شوند .
توابع زير براي بررسي شناور بودن عدد استفاده ميشوند.
مثال
<?php $x=10.365; var_dump((is_float($)); ?>
بينهايت درپي اچ پيPHP-infinityy
يك عددبزرگتر ازPHP_FLOAT_MAX در php بعنوان عدد بينهايت شناخته ميشود.اين اعداد نبايد در عبارات رياضي ظاهر شوند، درآنصورت نتايج حاصل قابل قبول نخواهد بود. براي كنترل وبررسي اين پديده، توابع زير درphp وجود دارد، تا بتوان پيشگيري لازم را براي دقت قابل قبول انجام داد .اگرحاصل عبارتي مطابق قوانينphp بينهايت شود، نتايج غيرقابل قبول ميباشد.
كنترل بينهايتي يا غير بينهايتي اعدادمثال -.
<?php $x=1.9e411; var_dump($x); ?>
غير عدديPHP-NaN
درphp براي غير عددي NaN درنظرگرفته شده است NaN .براي كنترل عمليات نا ممكن پيش بيني شده است .براي كنترل عمليات رياضي ناممكن ازتابع زير استفاده ميشود.
همچنان تابعvar_dump هم براي كنترل موارد كمك مي نمايد .
مثال نمونه ـ براي كنترل عملياتNaN
<?php $x=acos(8); var_dump($x); ?>
رشته عدديPHP-Numerical Strings
درphp تابعis_numeric() براي بررسي عددي بودن يك رشته ميتوان استفاده نمود.اگرآرگومان از نوع رشته عددي باشد،نتيجه برگشتيTRUE و اگرنباشد، نتيچهFALS است.
مثال ـ در برنامه زيركنترل عددي بودن رشته را انجام ميدهد.
<?php $x = 5985; var_dump(is_numeric($x)); $x = "5985"; var_dump(is_numeric($x)); $x = "59.85" + 100; var_dump(is_numeric($x)); $x = "Hello"; var_dump(is_numeric($x)); ?>
نكته ـ ازphp7.0 اين تابع براي رشته هاي فرمت هگزا را، بعنوان عددي تشخيص نداده وFALS برگشت ميدهد .مثلا رشته 0x14c3bb00c براي تابع رشته عددي نيست0x . ابتدا بعنوان علامت هگزاست.
phpرشته هاوشناورها عددي را درست ارسال مي نمايد، ونيازمند تغيريا تبديل نيست .ولي گاهي مواقع نيازمند تبديل ميباشد،ومي خواهيد عددي راinteger نمائيد .اينكار بوسيله تابعintval() ميتواند انجام شود.
مثال ـ درمثال زير عدد شناور ورشته عددي را به عدد صحيح تبديل ميكند.
<?php // Cast float to int $x = 23465.768; $int_cast = (int)$x; echo $int_cast; echo "<br>"; // Cast string to int $x = "23465.768"; $int_cast = (int)$x; echo $int_cast; ?>