circle-9Numbers

ธนวรรษ สืบสม 620710661

Data Type ใน ภาษา PHP นั้น ตัวแปรทุกตัวที่เราสร้างขึ้นมา จะต้องมีการกำหนดประเภท หรือชนิดของตัวแปร ซึ่งจะทำหน้าที่บอกว่า ตัวแปรที่ได้สร้างมานั้น ทำหน้าที่เก็บข้อมูลประเภทอะไร ซึงในส่วนของ Page นี้ จะอธิบายเกี่ยวกับการกำหนดการเก็บข้อมูลแบบ "ตัวเลข" โดยมีการใช้งานหลักๆ อยู่ 3 Data type ในภาษา PHP ได้แก่ Integer Float และ Number Strings และนอกจากนี้ภาษา PHP ยังมี Data type อีก 2 ประเภท ที่ใช้งานกับตัวเลข คือ Infinity และ NaN

  • ในภาษา PHP นั้น เราสามารถรู้ได้ว่าตัวแปรที่เราได้ กำหนดค่าไว้ว่าเป็น Data Type ชนิดไหนได้จากฟังก์ชัน var_dump()

ตัวอย่่าง

<!DOCTYPE html>
<html>
<body>
<?php
$x = 10;
$y = 20.30;
$z = "40";

var_dump($x);
echo "<br>";
var_dump($y);
echo "<br>";
var_dump($z);
?>
</body>
</html>

Output

Integers

Integer ใช้เก็บชนิดข้อมูลตัวเลขที่เป็นจำนวนเต็ม ที่ไม่ใช่ทศนิยมระหว่าง -2147483648 และ 2147483647 ในระบบ 32 bit และระหว่าง -9223372036854775808 และ 9223372036854775807 ในระบบ 64 bit ค่าที่มากกว่า หรือต่ำกว่าจะถูกจัดเก็บเป็น float เนื่องจากเกินขีดจำกัดของ Integer

กฎของ Integer

  • ต้องมีอย่างน้อย 1 หลัก

  • ต้องไม่มีจุดทศนิยม

  • สามารถเป็นได้ทั้งจำนวนบวกหรือจำนวนลบได้

  • สามารถ เก็บได้ทั้ง เลขฐาน 2 , เลขฐาน 10 , เลขฐาน 16

PHP สามารถค่าเรียกดูคงที่ ที่มีการจำกัดไว้ได้จากคำสั่งเหล่านี้

  • PHP_INT_MAX จำนวนเต็มที่มากที่สุดที่สามารถรองรับได้

  • PHP_INT_MIN จำนวนเต็มที่น้อยที่สุดที่สามารถรองรับได้

  • PHP_INT_SIZE ขนาดของจำนวนเต็มที่เป็น Byte

ตัวอย่าง

Output

เราสามารถตรวจสอบ ชนิดของตัวแปรว่าเป็น Integer ได้จากฟังก์ชัน

  • is_int()

  • is_integer()

  • is_long()

Output

Integer Overflow

หากมีการพบตัวเลขที่เกินขอบเขตของประเภท int จะถูกตีความว่าเป็น float แทน นอกจากนี้ การดําเนินการที่ส่งผลให้ตัวเลขเกินขอบเขตของประเภท int จะ return มาเป็น float แทน

Integer Division

ในภาษา PHP ไม่มีตัวดำเนินการ int division โดยตรง แต่สามารถทำได้โดย การใช้ ฟังก์ชัน intdiv() สามารถโยนผลลัพธ์เป็น int เพื่อปัดเศษให้เป็นศูนย์ หรือใช้ฟังก์ชัน round() ในการควบคุมการปัดเศษได้ละเอียดยิ่งขึ้น

เปรียบเทียบกับ ภาษา PHP ภาษา Java และ ภาษา Python

หัวเรื่อง
C
Java
Python

ขอบเขตของ Integer

มีขนาดของ int ใน C โดยทั่วไปจะเป็น 32-bit บนแพลตฟอร์มส่วนใหญ่ แต่สามารถเปลี่ยนแปลงได้ตามคอมไพเลอร์

มีขนาดที่แน่นอน int มีขนาด 32 bit long มีขนาด 64 bit

ชนิดข้อมูล int ของ Python สามารถเก็บค่าที่ใหญ่ได้ไม่จำกัด (ขึ้นอยู่กับหน่วยความจำของเครื่อง)

การจัดการ Overflow

ไม่มีการตรวจสอบ Overflow

ค่าจะวนกลับมาทีขอบเขตน้อยที่สุด และจะไม่มีการเปลี่ยนชนิดข้อมูลแบบอัตโนมัติ

int ใน Python สามารถขยายขนาดได้ไม่จำกัด จึงไม่เกิดการ Overflow

การตรวจสอบชนิดข้อมูล

ใน C ไม่มีฟังก์ชันในตัวเพื่อเช็คชนิดข้อมูลของตัวแปร แต่สามารถใช้sizeof() เพื่อดูขนาดของตัวแปร

ไม่จำเป็นต้องตรวจสอบเนื่องจากตัวแปรมีชนิดที่ระบุชัดเจน

isinstance(variable, int)ในการตรวจสอบว่าเป้น Interger หรือไม่

Floats

float ใช้เก็บชนิดข้อมูลตัวเลขที่มรจุดทศนิยม ซึ่งจะแตกต่างกับ Integer หรือตัวเลขในรูปแแบบ เอกซ์โพเนนเชียล เช่น 4.0, 661.071, 49.43, 7.65E+4, 6.66E-9 ล้วนเป็นประเภท float ทั้งหมด

PHP สามารถค่าเรียกดูคงที่ ที่มีการจำกัดไว้ได้จากคำสั่งเหล่านี้ (อ้างอิงจาก PHP 7.2)

  • PHP_FLOAT_MAX จำนวนทศนิยมที่แสดงได้มากที่สุด

  • PHP_FLOAT_MIN จำนวนทศนิยมตัวบวกที่แสดงได้น้อยที่สุด

  • PHP_FLOAT_DIG จำนวนหลักทศนิยมที่สามารถปัดเศษเป็นตัวเลขทศนิยมและปัดกลับโดยไม่สูญเสียความแม่นยำ

  • PHP_FLOAT_EPSILON จำนวนบวกที่แสดงได้น้อยที่สุด x ดังนั้น x + 1.0 != 1.0

เราสามารถตรวจสอบ ชนิดของตัวแปรว่าเป็น float ได้จากฟังก์ชัน

  • is_float()

  • is_double()

เปรียบเทียบกับ ภาษา Java และ ภาษา Python

หัวเรื่อง
C
Java
Python

ขอบเขตของ float

float ใน C โดยทั่วไปมีขนาด 32 บิต (4 ไบต์)

ใน Java มีชนิดข้อมูลทศนิยมสองแบบ คือ float (32-bit) และ double (64-bit)

ชนิดข้อมูล float ของ Python เป็นแบบ double-precision (64-bit) เช่นเดียวกับ อีกสองภาษา

precision ของ float

มีการควบคุม precision ในการคำนวณด้วย float, double, และ long double

float ประมาณ 6-7 หลัก

double ประมาณ 15 หลัก

ประมาณ 15 หลัก

การตรวจสอบข้อมูล float

สามารถทำได้หลายวิธี รวมถึงการใช้ฟังก์ชัน isnan() และ isinf() จาก <math.h>

ใน Java จะมีชนิดข้อมูลที่กำหนดชัดเจน เช่น float หรือ double

ใช้ฟังก์ชัน isinstance (variable, float) เพื่อตรวจสอบ

Infinity

ใน PHP นั้น ค่าตัวเลขที่มากกว่า PHP_FLOAT_MAX จะถือว่าเป็นอนันต์

เราสามารถตรวจสอบ ชนิดของตัวแปรว่าเป็น float ได้จากฟังก์ชัน

  • is_finite()

  • is_infinite()

เปรียบเทียบกับ ภาษา Java และ ภาษา Python

Java

  • ในภาษา Java ค่าที่เป็น Infinity จะถูกจัดอยู่ในชนิดข้อมูล float และ double

  • ค่าคงที่ของ Infinity ที่ใช้ใน Java คือ Float.POSITIVE_INFINITY และ Float.NEGATIVE_INFINITY สำหรับ float และ Double.POSITIVE_INFINITY และ Double.NEGATIVE_INFINITY สำหรับ double

  • การตรวจสอบทำได้ด้วยการเปรียบเทียบค่าโดยใช้ฟังก์ชัน isInfinite()

C

  • ใน C สามารถสร้างค่า Infinity ได้โดยการหารค่าที่ไม่ใช่ศูนย์กับศูนย์หรือใช้ค่าคงที่ INFINITY จาก <math.h>

  • ใน ภาษา C สามารถใช้ฟังก์ชัน isinf() จาก <math.h> เพื่อตรวจสอบว่าเป็น Infinity หรือไม่

Python

  • ค่าคงที่ของ Infinity ที่ใช้ สามารถเรียกดูได้จากคำสั่งfloat('inf') และ float('-inf') สำหรับค่าบวกและลบ

  • การตรวจสอบค่าที่เป็น Infinity ทำได้ด้วย math.isinf()

NaN

NaN ย่อมาจาก Not a Number เป็นค่าเฉพาะของชนิดข้อมูลตัวเลข มักจะเป็น floating point number ที่ไม่มีการกำหนดเป็นตัวเลข หรือการดำเนินการตัวเลขบางอย่างอาจส่งผลให้ผลลัพธ์เป็น NAN ผลลัพธ์นี้จะแสดงค่าที่ ไม่มีการกำหนดค่า หรือไม่สามารถแสดงได้ในการคำนวณ floating-point การเปรียบเทียบค่านี้กับค่าอื่นๆอย่างไม่รัดกุม หรือกับตัวเอง จะได้ผลลัพธ์เป็นเท็จ เนื่องจาก NAN แสดงถึงค่าที่แตกต่างกันได้หลายค่า จึงไม่ควรเปรียบเทียบ NAN กับค่าอื่น รวมถึงตัวมันเอง แต่ควรตรวจสอบโดยใช้ is_nan() แทน

เราสามารถตรวจสอบ ชนิดของตัวแปรว่าเป็น NaN ได้จากฟังก์ชัน

  • is_nan()

ตัวอย่าง

Output

เปรียบเทียบกับ ภาษา Java และ ภาษา Python

  • ในภาษา Java ใช้เมธอด Float.isNaN() หรือ Double.isNaN() สำหรับตรวจสอบ NaN

  • ในภาษา Python ใช้ฟังก์ชัน math.isnan() สำหรับตรวจสอบค่าที่เป็น NaN

  • ใน C สามารถสร้างค่า NaN ได้โดยการใช้ NAN จาก <math.h> และสามารถใช้ฟังก์ชัน isnan() เพื่อตรวจสอบว่าเป็น NaN หรือไม่

Numerical Strings

ฟังก์ชัน is_numeric() สามารถใช้ค้นหาว่าตัวแปรเป็นตัวเลขหรือไม่ ฟังก์ชันนี้จะคืนค่าเป็น true หากตัวแปรเป็นชนิดอื่นๆ นอกจากตัวเลข หากไม่ใช่คืนค่าเป็น false

Note: ใน PHP 7.0: is_numeric() ฟังก์ชัน จะคืนค่า FALSE สำหรับ String ของตัวเลขในรูปแบบ เลขฐาน 16

เปรียบเทียบกับ ภาษา Java และ ภาษา Python

Java

  • ในภาษา Java การแปลง Numerical Strings เป็นตัวเลขไม่ได้เกิดขึ้นโดยอัตโนมัติ การแปลงต้องทำด้วยการใช้เมธอดเฉพาะ เช่น Integer.parseInt() หรือ Double.parseDouble()

  • ภาษา Java ไม่อนุญาตให้แปลงสตริงที่มีตัวเลขปนกับตัวอักษร จะเกิด Error เมื่อรัน

  • Java ไม่มีฟังก์ชันเฉพาะที่สามารถตรวจสอบ Numerical Strings โดยตรง ต้องใช้การดักจับข้อผิดพลาด

Python

  • ในภาษา Python ไม่ทำการแปลง Numerical Strings เป็นตัวเลขโดยอัตโนมัติ ต้องใช้ฟังก์ชัน int() หรือ float() เพื่อทำการแปลง

  • Python ไม่มีฟังก์ชันเฉพาะที่ใช้ตรวจสอบ Numerical Strings โดยตรงเช่นเดียวกันกับภาษา Java ต้องใช้การแปลงสตริงเป็นตัวเลขแล้วดักจับข้อผิดพลาด

C

  • ใน C สามารถใช้ฟังก์ชัน atoi(), atof() หรือ strtol() เพื่อนำสตริงที่เป็นตัวเลขไปแปลงเป็นตัวเลขจริง

  • ใน C การแปลงสตริงเป็นตัวเลขอาจส่งผลให้เกิด Error หากสตริงไม่สามารถแปลงได้ หรืออยู่เกินขีดจำกัดของประเภทข้อมูลที่กำหนด สามารถใช้ฟังก์ชัน strtol() เพื่อจัดการข้อผิดพลาดได้

Casting Strings and Floats to Integers

หากต้องการแปลงค่าตัวเลขเป็นประเภทข้อมูลอื่นๆ ฟังก์ชัน (int), (integer) และ intval() มักใช้ในการแปลงค่าเป็น Integer โดยการแปลงค่าทศนิยม float เป็น Interger โดยใช้ฟังก์ชันที่กล่าวมา ผลลัพธ์ที่ออกมานั้น ค่าทศนิยมจะถูกตัดทิ้งโดยไม่มีการปัดเศษ ส่วนการแปลง String นั้นสามารถแปลงสตริงที่มีตัวเลขเป็นจำนวนเต็มได้โดยอัตโนมัติ หากแปลง String ที่ไม่ใช่ตัวเลขหรือ String ที่ไม่มีตัวเลขเริ่มต้นเป็น 0\

ตัวอย่าง

Output

เปรียบเทียบกับ ภาษา Java และ ภาษา Python

Java

  • ใน ภาษา Java ต้องใช้เมธอด Integer.parseInt() ในการแปลงค่า และจะเกิด Error หากมีตัวอักษรปน

  • ปัดทิ้งค่าทศนิยมโดยใช้เมธอดMath.round() เพื่อปัดเศษ

Python

  • ใน ภาษา Python ใช้ฟังก์ชัน int() ในการแปลงค่า และจะเกิด Error หากมีตัวอักษรปน

  • ปัดทิ้งค่าทศนิยมโดยใช้ฟังก์ชันround() เพื่อปัดเศษ

C

  • ใน ภาษา C ใช้ฟังก์ชัน (int) ในการแปลงค่า float ได้โดยตรง

  • ในภาษา C สามารถใช้ฟังก์ชัน atoi() หรือ strtol() เพื่อแปลงสตริงที่เป็นตัวเลขเป็นจำนวนเต็มatoi() จะคืนค่า 0 ถ้าสตริงไม่สามารถแปลงได้ ซึ่งอาจทำให้เกิดความสับสน หากต้องการตรวจสอบค่าที่เหลือในสตริงหลังการแปลง ควรใช้ strtol() ซึ่งสามารถตรวจสอบการแปลงได้

  • ในภาษา C ไม่มีฟังก์ชันในตัวเพื่อตรวจสอบว่าสตริงเป็นตัวเลขหรือไม่ ต้องทำการตรวจสอบด้วยตนเอง

จากที่กล่าวมา ภาษา PHP และ ภาษา C มีความคล้ายคลึงกัน และมีความยืดหยุ่นในการแปลงสตริงเป็นตัวเลขมากกว่า โดยไม่เกิดข้อผิดพลาดเมื่อค่าที่ไม่ใช่ตัวเลขถูกแปลง แต่จะไม่มี ฟังก์ชันสำหรับตรวจสอบสตริงเป็นตัวเลขสำหรับภาษา C จึงต้องทำการตรวจสอบด้วยตัวเอง ส่วน Java , และ Python มีความเข้มงวดในการแปลงค่ามากกว่า ซึ่งต้องใช้ฟังก์ชันแปลงโดยตรงและจะเกิดข้อผิดพลาดถ้า String ไม่ใช่ตัวเลข

References

Last updated