Numbers
ธนวรรษ สืบสม 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>public class Main {
public static void main(String[] args) {
int x = 10;
double y = 20.30;
String z = "40";
System.out.println("x (" + ((Object)x).getClass().getSimpleName() + "): " + x);
System.out.println("y (" + ((Object)y).getClass().getSimpleName() + "): " + y);
System.out.println("z (" + ((Object)z).getClass().getSimpleName() + "): " + z);
}
}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
ขอบเขตของ 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
ขอบเขตของ 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
https://www.w3schools.com/php/php_numbers.asp PHP Numbers
https://www.javatpoint.com/php-data-types#integer Datatype Integers ,Float
https://www.tutorialspoint.com/php/php_data_types.htm Datatype Intergers,Float
https://www.php.net/manual/en/language.types.numeric-strings.php Numeric strings
https://www.w3schools.com/java/java_data_types_numbers.asp Java Datatype numbers
https://www.w3schools.com/python/python_numbers.asp Python Datatype numbers
https://docs.python.org/3/library/functions.html#int Python function
https://www.w3schools.com/c/c_data_types_numbers.php C Numeric Data Types
Last updated