מספרים שלמים
integer הוא מספר מהקבוצה מספר שלם Z = {..., -2, -1, 0, 1, 2 ,...}.
ראה גם: מספרים שלמים בעלי אורך שרירותי / GMP ו-מספרים בעלי נקודה צפה >, ו- דיוק אינסופי / BCMath .
תחביר
שלמים יכולים להרשם כמספרים דקסימיאליים (בסיס ספירה 10), הקסאדקסימיאליים (בסיס ספירה 16) או אוקטאלים (בסיס 8), להם יתכן ויוקדם סימון (- או +).
אם המספר אוקטאלי, עליך להקדים לו 0 (אפס), לכתיבת המספר כהקסא עליך להקדים לו 0x.
Example#1 כתיבת שלמים
<?php
$a = 1234; # decimal number
$a = -123; # a negative number
$a = 0123; # octal number (equivalent to 83 decimal)
$a = 0x1A; # hexadecimal number (equivalent to 26 decimal)
?>
<?php decimal : [1-9][0-9]* | 0 hexadecimal : 0[xX][0-9a-fA-F]+ octal : 0[0-7]+ integer : [+-]?decimal | [+-]?hexadecimal | [+-]?octal ?> Formally the possible structure for integer literals is: <informalexample> <programlisting> <![CDATA[ <?php decimal : [1-9][0-9]* | 0 decimal : [1-9][0-9]* hexadecimal : 0[xX][0-9a-fA-F]+ | 0 octal : 0[0-7]+ hexadecimal : 0[xX][0-9a-fA-F]+ integer : [+-]?decimal octal : 0[0-7]+ | [+-]?hexadecimal | [+-]?octal integer : [+-]?decimal | [+-]?hexadecimal | [+-]?octal
גלישה בשלמים
אם כתבת מספר החורג מגבולות הinteger, הוא יפורש במקום זאת כfloat. בנוסף, אם כתוצאה מפעולה שביצעת integer חרג מטווחיו, הוא יהפוך ל float במקום זאת.
<?php
$large_number = 2147483647;
var_dump($large_number);
// output: int(2147483647)
$large_number = 2147483648;
var_dump($large_number);
// output: float(2147483648)
// this goes also for hexadecimal specified integers:
var_dump( 0x80000000 );
// output: float(2147483648)
$million = 1000000;
$large_number = 50000 * $million;
var_dump($large_number);
// output: float(50000000000)
?>
למרבה הצער, בגלל באג בPHP הדבר איננו עובד כהלכה כאשר מעורבים מספרים שליליים. לדוגמא: כאשר אתה עושה -50000 * $million, התוצאה היא -429496728. מכל מקום, כאשר שני האופרנדים הם שליליים, לא קיימת בעיה.
באג זה נפתר החל מPHP 4.1.0
אין אופרטור המחלק מספרים שלמים בPHP. 1/2מפיק float 0.5.אתה יכול להמיר את הערך לשלם, כך שתמיד יעוגל כלפי מטה, או שאתה יכול להשתמש בפונקציהround() .
<?php
var_dump(25/7); // float(3.5714285714286)
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7)); // float(4)
?>
המרת משתנה לשלם
להמיר במפורש ערך לinteger, השתמש באחד משני האפשרויות: הממיר (int) או הממיר (integer). יש להדגיש, כי בדרך כלל לא תצטרך המרה, מכיוון שהערך יומר אוטומטית אם השימוש בו יהיה בפונקציה או משפט הדורש כקלט ארגומנטinteger. אתה גם יכול להמיר ערך לשלם עם הפונקציה intval().
ראה גם מעבר בין טיפוסים.
המרה מספרים בוליאניים
FALSE יומר ב 0 (אפס), ו TRUE יומר ב 1 (אחד).
המרה ממספרי נקודה צפה
כאשר ממירים מנקודה צפה לשלם, המספר יעוגל לכיוון אפס.
אם המספר המקורי חורג מגבולות המספר השלם, (לרוב +/- 2.15e+9 = 2^31), התוצאה לא מוגדרת, מכיוון שלמספר הנקודה הצפה אין מספיק דיוק לדעת לאיזה מספר לעגל. לא יופיעו שום אתרעות או אזהרות כאשר מתבצעת המרה שכזו!
לעולם אל תמיר שבר לא ידוע ל float, מכיוון שזה יכול לעיתים להוביל לתוצאות לא מצופות.
<? php
echo (int) ( (0.1+0.7) * 10 ); // echoes 7!
?>
ממחרוזות
מטיפוסים אחרים
ההתנהגות של המרה לשלמים איננו מוגדרת עבור טיפוסים אחרים. נכון לעכשיו, התוצאה תהיה כאילו המשתנה תחילה המרה למשתנה בוליאני. מכל מקום, אל תסמוך על התנהגות זו, מכיוון שהיא יכולה להשתנות ללא כל אתרעה.