PHP cung cấp cho ta 2 loại dữ liệu số cơ bản là số nguyên và số thực. Trong bài này ta sẽ tìm hiểu sâu hơn về kiểu integer, float, cách ép kiểu và chuỗi số trong PHP
1. Kiểu số nguyên int(integer)
1.1. Tìm hiểu về kiểu số nguyên
Đây là kiểu dữ liệu biểu diễn số nguyên. Số nguyên ở đây là số mà sẽ không có phần thập phân. Ví dụ: 2,345 , -324,5 , 43, -56 , … là các số nguyên. Còn số 4.5 , 6.66 , -48.4 , … đều là các số thập phân.
Dải giá trị của kiểu int phụ thuộc vào số bit của hệ điều hành. Trên hệ điều hành 32 bit thì có giá trị từ -2^31 ( -2 147 683 648 ) đến 2^31 – 1 ( 2 147 683 648 ). Đối với hệ điều hành 64 bit giá trị này tương ứng ( -9 223 372 036 854 775 808 ) đến( 9 223 372 036 854 775 807 ). Nếu giá trị mà không nằm trong khoảng này thì sẽ được tự động lưu trữ dưới dạng float, vì nó đã vượt quá giới hạn của một số nguyên. Và PHP cũng chấp nhận các giá trị số nguyên viết ở hệ 10 (mặc định) hệ 2, hệ 8 và hệ 16.
Chú ý
Nếu một trong các toán hạng là kiểu float thì kết quả lưu trữ vẫn sẽ ở dưới dạng float. Ví dụ: 4*2.5 cho kết quả là 10 thì 10 vẫn được lưu dưới dạng float.
Tóm gọn lại ở đây mình sẽ đưa ra một số nguyên tắc cho kiểu số nguyên:
- Một số nguyên phải có ít nhất một chữ số.
- Một số nguyên không được có dấu thập phân.
- Một số nguyên có thể là số dương có thể là số âm.
- Nếu giá trị của một số vượt quá dải giá trị sẽ được lưu trữ dưới dạng float.
1.2. Kiểm tra kiểu và Hằng số được xác định trước trong kiểu số nguyên
Hằng số được xác định trước trong kiểu số nguyên là:
- PHP_INT_MAX : Là số nguyên lớn nhất được hỗ trợ.
- PHP_INT_MIN : là số nguyên nhỏ nhất được hỗ trợ.
- PHP_INT_SIZE : kích thước của một số nguyên tính bằng byte.
Một số cách để kiểm tra xem biến có phải kiểu số nguyên hay không: ta có thể dùng một trong các câu lệnh sau: is_int() , is_integer() , is_long() .
Ví dụ:
<?php $x = 5985; var_dump(is_int($x)); $x = 59.85; var_dump(is_int($x)); ?>
1.3. Chuyển đổi dữ liệu về kiểu số nguyên
PHP cho phép chúng ta chuyển đổi dữ liệu từ kiểu chuỗi và logic về số nguyên. Để chuyển đổi ta sẽ sử dụng phép toán chuyển đổi kiểu int hoặc kiểu integer trước giá trị biến cần chuyển và gán kết quả cho một biến khác.
Quy tắc chuyển đổi sẽ như sau:
- Giá trị true -> 1
- Giá trị false -> 0
- Chuỗi chứa toán tử số -> chuyển thành giá trị ở cơ số 10
- Chuỗi bắt đầu bằng chữ số -> trích phần chữ số để chuyển thành giá số ở cơ số 10
- Các loại chuỗi khác -> giá trị chuyển về 0
2. Kiểu số thực(Float)
Kiểu số thực là kiểu mà số ở dưới dạng số thập phân hay số mũ. Kiểu float này thường được lưu giá trị đến 1.7976931348623E + 308(phụ thuộc vào nền tảng) và có độ chính xác tối đa là 14 chữ số.
Ví dụ: 2.0 , 274.5 , 6.64E + 4 , … đều là kiểu float.
PHP có các hằng số được xác định trước sau đây cho kiểu float:
- PHP_FLOAT_MAX : số dấu phẩy có thể biểu diễn lớn nhất.
- PHP_FLOAT_MIN : số dấu phẩy dương nhỏ nhất có thể biểu diễn nhỏ nhất.
- -PHP_FLOAT_MAX : số dấu phẩy âm nhỏ nhất có thể biểu diễn được.
- PHP_FLOAT_DIG : số chữ số thập phân có thể được làm tròn thành số float và ngược lại mà không bị mất độ chính xác
- PHP_FLOAT_EPSILON : số dương nhỏ nhất có thể biểu diễn x , sao cho x + 1.0! = 1.0
Ta sẽ sử dụng hàm is_float() để kiểm tra xem biến có là kiểu float hay không.
Ví dụ:
<?php $x = 10.365; var_dump(is_float($x)); ?>
Tương tự ta có thể chuyển đổi kiểu từ các kiểu dữ liệu khác sang (string, int) về kiểu số thực thông qua hàm floatval().
3. Giá trị vô hạn và NaN trong PHP
Một giá trị vô hạn là một giá trị mà nó sẽ lớn hơn PHP_FLOAT_MAX. Để có thể kiểm tra được một giá trị là vô hạn hay hữu hạn ta dùng hàm is_finite()
Ví dụ:
<?php $x = 1.9e411; var_dump($x); ?>
NaN trong PHP là viết tắt của Not a Number(không phải là số). NaN sẽ được sử dụng cho các phép toán không thể thực hiện. Ta có hàm is_nan() để kiểm tra xem giá trị không phải ở dạng số không.
Ví dụ:
<?php $x = acos(11); var_dump($x); //var_dump sẽ trả về kiểu dữ liệu và giá trị ?>
4. Chuỗi số trong PHP
Hàm is_numeric() trong PHP có thể được sử dụng để tìm xem một biến có phải là số hay không. Hàm sẽ trả về True nếu biến là số hoặc một chuỗi và ngược lại là False.
<?php $x = 5985; var_dump(is_numeric($x)); $x = "5985"; var_dump(is_numeric($x)); $x = "59.85" + 100; var_dump(is_numeric($x)); $x = "Hello"; var_dump(is_numeric($x)); ?>
Chú ý
Từ PHP 7 hàm is_numeric() sẽ trả về giá trị False cho các chuỗi số ở dạng thập lục phân(0xf8c5b) vì chúng không được coi là chuỗi số nữa.