ภาษาพีเอชพี/ประเภทของตัวแปร/จำนวนเต็ม
จาก Wikibooks
เนื้อหา |
[แก้ไข] Integers
ชนิด integer คือ จำนวน ในเซ็ตของ Z = {..., -2, -1, 0, 1, 2, ...}
หรือที่เรียกกันว่า จำนวนเต็ม
[แก้ไข] รูปแบบคำสั่ง
Integer สามารถกำหนดค่าได้ทั้งในแบบ ฐานสิบ(decimal) ฐานสิบหก(hexadecimal) ฐานแปด(octal) สามารถใช้เครื่องหมายกำกับได้ (+ หรือ -)
หากต้องการกำหนดแบบฐานแปด ให้นำหน้าจำนวนด้วย 0 (ศุนย์) ถ้าต้องการใช้เลขฐานสิบหกให้นำหน้าจำนวนด้วย 0x
<?php $a = 1234; // เลขฐานสิบ $a = -123; // เลขฐานสิบติดลบ $a = 0123; // เลขฐานแปด (มีค่า 83 ในเลขฐานสิบ) $a = 0x1A; // เลขฐานสิบหก (มีค่า 26 ในเลขฐานสิบ) ?>
ขนาดที่ใช้ในการเก็บ integer ขึ้นอยู่กับแพล็ตฟอร์มที่ใช้ โดยค่าที่เก็บได้สูงสุดจะประมาณ 2 พันล้าน(signed integer 32 bits) PHP นั้นไม่สนับสนุน unsigned integer ส่วนขนาดของ interger สามารถกำหนดได้โดยใช้ PHP_INT_SIZE และค่าสูงสุดกำหนดได้โดยใช้ PHP_INT_MAX
- ถ้ามีการใส่ตัวเลขที่ไม่ถูกต้องใน octal integer (เช่น 8 หรือ 9) ตัวเลขที่เหลือจะถูกข้ามไป
<?php var_dump(01090); // 010 octal = 8 decimal ?>
[แก้ไข] Integer Overflow
ถ้า PHP พบกับจำนวนที่มีค่าเกินกว่าที่ชนิด 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) // it's true also for hexadecimal specified integers between 2^31 and 2^32-1: var_dump( 0xffffffff ); // output: float(4294967295) // this doesn't go for hexadecimal specified integers above 2^32-1: var_dump( 0x100000000 ); // output: int(2147483647) $million = 1000000; $large_number = 50000 * $million; var_dump($large_number); // output: float(50000000000) ?>
- ใน PHP ไม่มี operator การหาร สำหรับ integer
1/2 จะได้ค่า float 0.5 โดยค่าสามารถ cast(แปลง) เป็น integer ได้แต่จะมีการปัดลง หรือจะใช้ round() ที่ควบคุมการปัดได้มากกว่าเดิม
<?php var_dump(25/7); // float(3.5714285714286) var_dump((int) (25/7)); // int(3) var_dump(round(25/7)); // float(4) ?>
[แก้ไข] การแปลงเป็น integer
สามารถแปลงค่าเป็น integer ได้ด้วยการใช้ (int) หรือ (integer) แบบในตัวอย่างข้างบน แต่โดยมากแล้วมัก ไม่จำเป็น เนื่องจากค่าจะได้รับการแปลงโดยอัตโนมัติหากว่า operator, function หรือ control structure นั้นต้องการค่าชนิด integer เป็น argument และค่านั้นสามารถแปลงเป็น integer ได้ด้วยฟังก์ชั่น intval()
[แก้ไข] แปลงจาก boolean
FALSE จะได้ค่าเป็น 0 (ศูนย์) และ TRUE จะได้ค่าเป็น 1 (หนึ่ง)
[แก้ไข] แปลงจาก float
เมื่อมีการแปลงจาก float เป็น integer ค่าจะถูกปัดลง
ถ้าหากแปลงค่า float เกินกว่าที่ int จะเก็บไว้ได้ ผลลัพธ์ที่จะได้ยังไม่ถูกกำหนด เนื่องจาก float นั้นไม่มีความแม่นยำพอที่จะบอก integer ที่เจาะจงได้
จะไม่มีการเตือน เมื่อเกิดปัญหาแบบนี้
- คำเตือน : อย่าได้ cast เศษที่แปลก ๆ เนื่องจากบางครั้งอาจจะทำให้พบกับผลลัพธ์ที่ไม่คาดคิด
<?php echo (int) ( (0.1+0.7) * 10 ); // echoes 7! แบบนี้ ?>
[แก้ไข] การแปลงจาก string
- อ่านต่อใน Strings
[แก้ไข] การแปลงจากประเภทอื่น ๆ นอกจากนี้
- การแปลงจากชนิดตัวแปรประเภทอื่น ๆ นอกเหนือจากที่กล่าวมาเป็น integer ยังไม่มีการกำหนด เพราะฉะนั้นอย่าไว้ใจกับรูปแบบที่ค้นพบเอาเอง
เพราะมันอาจจะเปลี่ยนแปลงได้โดยไม่มีการประกาศให้ทราบก่อน