Forum und email

מספרים שלמים

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)
?>
Formally the possible structure for integer literals is:
  
  <?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        
הגודל של שלם הוא תלוי בתצורה, אף על פי שלרוב הערך הוא קצת יותר משני מיליארד (עבור 32 ביט). PHP לא תומך בשלמים "בכיוון אחד" (unsigned integers), כלומרת שלמים היכולים לקבל ערך חיובי בלבד ועל ידי כך הערך המקסימלי מוכפל.

גלישה בשלמים

אם כתבת מספר החורג מגבולות ה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_dump0x80000000 );
// output: float(2147483648)

$million 1000000;
$large_number =  50000 $million;
var_dump($large_number);
// output: float(50000000000)
?>
Warning

למרבה הצער, בגלל באג ב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), התוצאה לא מוגדרת, מכיוון שלמספר הנקודה הצפה אין מספיק דיוק לדעת לאיזה מספר לעגל. לא יופיעו שום אתרעות או אזהרות כאשר מתבצעת המרה שכזו!

Warning

לעולם אל תמיר שבר לא ידוע ל float, מכיוון שזה יכול לעיתים להוביל לתוצאות לא מצופות.

<? php
echo (int) ( (0.1+0.7) * 10 ); // echoes 7!
?>
ראה עוד מידע אודות אזהרה לגבי הדיוק של מספרי נקודה צפה.

מטיפוסים אחרים

Caution

ההתנהגות של המרה לשלמים איננו מוגדרת עבור טיפוסים אחרים. נכון לעכשיו, התוצאה תהיה כאילו המשתנה תחילה המרה למשתנה בוליאני. מכל מקום, אל תסמוך על התנהגות זו, מכיוון שהיא יכולה להשתנות ללא כל אתרעה.