ภาษาพีเอชพี/ประเภทของตัวแปร/จำนวนเต็ม

จาก วิกิตำรา
ไปยังการนำทาง ไปยังการค้นหา

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 ยังไม่มีการกำหนด เพราะฉะนั้นอย่าไว้ใจกับรูปแบบที่ค้นพบเอาเอง
    เพราะมันอาจจะเปลี่ยนแปลงได้โดยไม่มีการประกาศให้ทราบก่อน