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

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