Kiểu số trong PHP

Kiểu số trong PHP

Trong chương này, chúng ta sẽ tìm hiểu sâu về kiểu integer, float và cách ép kiểu, …

Một điều cần chú ý về PHP là nó cung cấp chuyển đổi kiểu dữ liệu tự động.

Vì vậy, nếu bạn gán một giá trị kiểu số nguyên cho một biến, kiểu dữ liệu của biến đó sẽ tự động là kiểu số nguyên.

Sau đó, nếu bạn tiếp tục gán một chuỗi cho cùng một biến đó, kiểu dữ liệu sẽ thay đổi thành kiểu chuỗi.

Việc chuyển đổi kiểu dữ liệu tự động này đôi khi có thể phá vỡ mã của bạn.

Kiểu integer trong PHP

Một số nguyên (integer) là một số không có phần thập phân.

2, 256, -256, 10358, -179567 đều là các số nguyên. Trong khi 7.56, 10.0, 150.67 là các số thập phân.

Kiểu dữ liệu số nguyên là một số không thập phân có giá trị trong khoảng từ -2147483648 đến 2147483647.

Một giá trị lớn hơn (hoặc nhỏ hơn) so với giá trị này, sẽ được lưu dưới dạng float, vì nó vượt quá giới hạn của một số nguyên.

Một điều quan trọng khác cần biết là ngay cả khi 4 * 2.5 = 10 thì kết quả được lưu dưới dạng float, bởi vì một trong các toán hạng là kiểu float (2.5).

Dưới đây là một số quy tắc cho 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à dương hoặc âm.
  • Các số nguyên có thể được chỉ định theo ba định dạng: thập phân (dựa trên 10), thập lục phân (dựa trên 16 – có tiền tố là 0x) hoặc bát phân (dựa trên 8 – có tiền tố bằng 0)

PHP có các hàm sau để kiểm tra xem kiểu dữ liệu của biến có phải là số nguyên không:

  • is_int()
  • is_integer() – bí danh của is_int()
  • is_long() – bí danh của is_int()
<?php
    $x = 5985;
    var_dump(is_int($x));

    $x = 59.85;
    var_dump(is_int($x));
?>

Đây là kết quả:

bool(true)
bool(false)

Kiểu float trong PHP

Kiểu dữ liệu float là một số có dấu thập phân hoặc số ở dạng số mũ.

2.0, 256.4, 10.358, 7.64E + 5, 5.56E-5 đều là kiểu dữ liệu float.

Kiểu dữ liệu float có thể lưu trữ giá trị lên tới 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ố.

PHP có các hàm sau để kiểm tra xem kiểu dữ liệu của biến có phải là float không:

  • is_float()
  • is_double() – bí danh của is_float()
<?php
    $x = 10.365;
    var_dump(is_float($x));
?>

Đây là kết quả:

bool(true)

Giá trị vô hạn trong PHP

Một số có giá trị lớn hơn PHP_FLOAT_MAX được coi là vô hạn.

PHP có các hàm sau để kiểm tra xem một giá trị số là hữu hạn hay vô hạn:

  • is_finite()
  • is_infinite()

Tuy nhiên, hàm var_dump () của PHP trả về kiểu dữ liệu và giá trị:

<?php
    $x = 1.9e411;
    var_dump($x);
?>

Đây là kết quả:

float(INF)

NaN trong PHP

NaN là viết tắt của Not a Number (không phải là số). NaN được sử dụng cho các phép tính toán học không thể thực hiện.

PHP có hàm is_nan() để kiểm tra xem giá trị không phải là số. Ở ví dụ dưới đây, hàm var_dump() của PHP trả về kiểu dữ liệu và giá trị:

<?php
    $x = acos(8);
    var_dump($x);
?>

Đây là kết quả:

float(NAN)

Chuỗi số trong PHP

Hàm is_numeric() của PHP có thể được sử dụng để tìm xem một biến có phải là số hay không. Hàm trả về true nếu biến là một số hoặc một chuỗi số, 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));
?>

Đây là kết quả:

bool(true)
bool(true)
bool(true)
bool(false)

Lưu ý: Từ PHP 7.0 hàm is_numeric() sẽ trả về FALSE cho các chuỗi số ở dạng thập lục phân (ví dụ 0xf4c3b00c), vì chúng không còn được coi là chuỗi số.

Ép kiểu chuỗi và float sang integer trong PHP

Đôi khi bạn cần ép kiểu một giá trị thành một kiểu dữ liệu khác.

Hàm (int), (integer), hoặc intval() thường được sử dụng để ép kiểu một giá trị thành một kiểu số nguyên.

<?php
    // Cast float to int
    $x = 23465.768;
    $int_cast = (int)$x;
    echo $int_cast;

    echo "<br>";

    // Cast string to int
    $x = "23465.768";
    $int_cast = (int)$x;
    echo $int_cast;
?>

Đây là kết quả:

23465
23465

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *