Hàm is_numeric() là một hàm có sẵn trong PHP, được sử dụng để kiểm tra xem một biến được truyền vào hàm dưới dạng tham số có phải là một số hay một chuỗi số hay không. Hàm trả về một giá trị boolean
cú pháp.
bool is_numeric ( $var )Thông số. Hàm chấp nhận một tham số duy nhất là bắt buộc và được mô tả bên dưới.
- $var. Tham số đầu vào này là biến mà hàm kiểm tra xem đó là một số hay một chuỗi số. Dựa trên xác minh này, hàm trả về giá trị boolean
Giá trị trả về. Hàm trả về TRUE nếu $var là một số hoặc một chuỗi số và trả về FALSE nếu không
Nếu bạn không biết trước mình có số float hay số nguyên
và nếu chuỗi có thể chứa các ký tự đặc biệt (như dấu cách, €, v.v.),
and if it may contain more than 1 dot or comma,
you may use this function:
Làm việc với các con số trong PHP có vẻ là một khái niệm tầm thường, nhưng nó có thể khá khó hiểu. Thoạt nhìn có vẻ dễ dàng vì PHP cung cấp chuyển đổi kiểu tự động. Ví dụ: bạn có thể gán một giá trị nguyên cho một biến và kiểu của biến đó sẽ là một số nguyên. Trên dòng tiếp theo, bạn có thể gán một chuỗi cho cùng một biến và loại sẽ thay đổi thành một chuỗi. Thật không may, chuyển đổi tự động này đôi khi có thể phá vỡ mã của bạn
Có rất nhiều loại cho các giá trị số. Trong hướng dẫn này, bạn sẽ tìm hiểu về số nguyên và số float trong PHP, cũng như các hàm có thể được sử dụng để xác định loại số mà chúng ta đang xử lý và chuyển đổi giữa chúng. Bạn cũng sẽ học cách chuyển đổi số nguyên và số float sang và từ các chuỗi số
Các loại số khác nhau trong PHP
số nguyên
Loại số cơ bản nhất trong PHP là số nguyên. Như bạn có thể đã biết, số nguyên là số không có phần thập phân. Ví dụ: 2 là một số nguyên và 235298 hoặc -235298 cũng vậy. Mặt khác, 2. 0 và 3. 58 là phao. Chúng ta sẽ thảo luận chi tiết hơn sau
Một điều quan trọng cần nhớ là một số không nhất thiết phải thuộc loại _______43 nếu nó không có phần thập phân. Ví dụ: <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>4 chính xác là <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>5, nhưng loại kết quả này vẫn sẽ là <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>6. Khi bạn nhân các số, kết quả cuối cùng sẽ là kiểu float nếu ít nhất một trong các toán hạng là số float. Số cuối cùng có phần thập phân hay không không quan trọng
Ngoài ra, giá trị tối đa mà một số nguyên có thể có trong PHP trên hệ thống của bạn có thể được lấy bằng hằng số <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>7. Giá trị có độ lớn lớn hơn giá trị được trả về bởi <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>7 sẽ được lưu trữ dưới dạng số thực ngay cả khi giá trị đó trông giống số nguyên
Nói chung, bạn sẽ mong đợi kết quả của phép nhân hai biến loại <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>3 là loại <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>3. Tuy nhiên, nó không đúng trong trường hợp tràn. Phép nhân năm hoặc sáu số khác nhau có thể dễ dàng đưa bạn ra ngoài giới hạn của loại <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>3. Ví dụ: kết quả của <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>4 là số float trên hệ thống của tôi vì nó vượt quá giá trị của <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>7, tức là <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>6
Bạn có thể sử dụng hàm <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>7 để kiểm tra xem một số có thuộc loại số nguyên hay không. Có hai bí danh của hàm này, được gọi là <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>8 và <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>9. Cả hai sẽ cho cùng một kết quả
phao nổi
Loại số phổ biến tiếp theo mà bạn sẽ xử lý là số float. Không giống như số nguyên, trong hầu hết các trường hợp chỉ đơn giản là số không có dấu thập phân, một số loại <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>6 có thể được biểu diễn theo nhiều cách khác nhau. Các giá trị <?php $int_a = 15*12; // Output: int(180) var_dump($int_a); $num = floor($int_a); // Output: float(180) var_dump($num); ?>1, <?php $int_a = 15*12; // Output: int(180) var_dump($int_a); $num = floor($int_a); // Output: float(180) var_dump($num); ?>2, <?php $int_a = 15*12; // Output: int(180) var_dump($int_a); $num = floor($int_a); // Output: float(180) var_dump($num); ?>3 và <?php $int_a = 15*12; // Output: int(180) var_dump($int_a); $num = floor($int_a); // Output: float(180) var_dump($num); ?>4 đều là số thực
PHP sẽ tự động chuyển đổi một số thành loại <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>6 bất cứ khi nào có số thập phân hoặc số rất lớn. Loại <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>6 thường có thể lưu trữ các số có độ lớn xấp xỉ bằng <?php $int_a = 15*12; // Output: int(180) var_dump($int_a); $num = floor($int_a); // Output: float(180) var_dump($num); ?>7. Tuy nhiên, điều này phụ thuộc vào nền tảng
Giá trị <?php $int_a = 15*12; // Output: int(180) var_dump($int_a); $num = floor($int_a); // Output: float(180) var_dump($num); ?>7 có vẻ như là một giá trị rất lớn—và đó là. —nhưng số float có độ chính xác tối đa chỉ khoảng 14 chữ số. Bất kỳ số nào có nhiều chữ số hơn sẽ mất độ chính xác. Điều đó có nghĩa là bạn có thể lưu trữ một số rất lớn, nhưng bạn sẽ không thể giữ thông tin về giá trị chính xác của nó—trong nhiều trường hợp, số float chỉ là giá trị gần đúng
Có hai hàm có thể được sử dụng để xác định xem giá trị bạn đang xử lý có phải là số float hay không. Các hàm này là <?php $int_a = 15*12; // Output: int(180) var_dump($int_a); $num = floor($int_a); // Output: float(180) var_dump($num); ?>9 và // This function strip spaces and other characters from a string and return a number. // It works for integer and float. // It expect decimal delimiter to be either a '.' or ',' // Note: everything after an eventual 2nd decimal delimiter will be removed. function stringToNumber($string) { // return 0 if the string contains no number at all or is not a string: if (!is_string($string) || !preg_match('/\d/', $string)) { return 0; } // Replace all ',' with '.': $workingString = str_replace(',', '.', $string); // Keep only number and '.': $workingString = preg_replace("/[^0-9.]+/", "", $workingString); // Split the integer part and the decimal part, // (and eventually a third part if there are more // than 1 decimal delimiter in the string): $explodedString = explode('.', $workingString, 3); if ($explodedString[0] === '') { // No number was present before the first decimal delimiter, // so we assume it was meant to be a 0: $explodedString[0] = '0'; } if (sizeof($explodedString) === 1) { // No decimal delimiter was present in the string, // create a string representing an integer: $workingString = $explodedString[0]; } else { // A decimal delimiter was present, // create a string representing a float: $workingString = $explodedString[0] . '.' . $explodedString[1]; } // Create a number from this now non-ambiguous string: $number = $workingString * 1; return $number; } 40. Trên thực tế, // This function strip spaces and other characters from a string and return a number. // It works for integer and float. // It expect decimal delimiter to be either a '.' or ',' // Note: everything after an eventual 2nd decimal delimiter will be removed. function stringToNumber($string) { // return 0 if the string contains no number at all or is not a string: if (!is_string($string) || !preg_match('/\d/', $string)) { return 0; } // Replace all ',' with '.': $workingString = str_replace(',', '.', $string); // Keep only number and '.': $workingString = preg_replace("/[^0-9.]+/", "", $workingString); // Split the integer part and the decimal part, // (and eventually a third part if there are more // than 1 decimal delimiter in the string): $explodedString = explode('.', $workingString, 3); if ($explodedString[0] === '') { // No number was present before the first decimal delimiter, // so we assume it was meant to be a 0: $explodedString[0] = '0'; } if (sizeof($explodedString) === 1) { // No decimal delimiter was present in the string, // create a string representing an integer: $workingString = $explodedString[0]; } else { // A decimal delimiter was present, // create a string representing a float: $workingString = $explodedString[0] . '.' . $explodedString[1]; } // Create a number from this now non-ambiguous string: $number = $workingString * 1; return $number; } 40 chỉ là bí danh của <?php $int_a = 15*12; // Output: int(180) var_dump($int_a); $num = floor($int_a); // Output: float(180) var_dump($num); ?>9, vì vậy bạn có thể sử dụng bất kỳ bí danh nào trong số đó và nhận được kết quả tương tự
Vô cực và NaN
Có hai loại giá trị số nữa mà bạn có thể phải xử lý khi viết các chương trình liên quan đến toán học. Các giá trị này là vô cùng và // This function strip spaces and other characters from a string and return a number. // It works for integer and float. // It expect decimal delimiter to be either a '.' or ',' // Note: everything after an eventual 2nd decimal delimiter will be removed. function stringToNumber($string) { // return 0 if the string contains no number at all or is not a string: if (!is_string($string) || !preg_match('/\d/', $string)) { return 0; } // Replace all ',' with '.': $workingString = str_replace(',', '.', $string); // Keep only number and '.': $workingString = preg_replace("/[^0-9.]+/", "", $workingString); // Split the integer part and the decimal part, // (and eventually a third part if there are more // than 1 decimal delimiter in the string): $explodedString = explode('.', $workingString, 3); if ($explodedString[0] === '') { // No number was present before the first decimal delimiter, // so we assume it was meant to be a 0: $explodedString[0] = '0'; } if (sizeof($explodedString) === 1) { // No decimal delimiter was present in the string, // create a string representing an integer: $workingString = $explodedString[0]; } else { // A decimal delimiter was present, // create a string representing a float: $workingString = $explodedString[0] . '.' . $explodedString[1]; } // Create a number from this now non-ambiguous string: $number = $workingString * 1; return $number; } 43 (không phải số). Cả hai giá trị này đều cần một chút giải thích vì chúng khác với những gì bạn có thể mong đợi
Vô cực trong PHP khác với vô cực ngoài đời thực. Trong PHP, bất kỳ giá trị số nào trên xấp xỉ _______144 trên một nền tảng được coi là vô hạn. Vì vậy // This function strip spaces and other characters from a string and return a number. // It works for integer and float. // It expect decimal delimiter to be either a '.' or ',' // Note: everything after an eventual 2nd decimal delimiter will be removed. function stringToNumber($string) { // return 0 if the string contains no number at all or is not a string: if (!is_string($string) || !preg_match('/\d/', $string)) { return 0; } // Replace all ',' with '.': $workingString = str_replace(',', '.', $string); // Keep only number and '.': $workingString = preg_replace("/[^0-9.]+/", "", $workingString); // Split the integer part and the decimal part, // (and eventually a third part if there are more // than 1 decimal delimiter in the string): $explodedString = explode('.', $workingString, 3); if ($explodedString[0] === '') { // No number was present before the first decimal delimiter, // so we assume it was meant to be a 0: $explodedString[0] = '0'; } if (sizeof($explodedString) === 1) { // No decimal delimiter was present in the string, // create a string representing an integer: $workingString = $explodedString[0]; } else { // A decimal delimiter was present, // create a string representing a float: $workingString = $explodedString[0] . '.' . $explodedString[1]; } // Create a number from this now non-ambiguous string: $number = $workingString * 1; return $number; } 45 sẽ cung cấp cho bạn // This function strip spaces and other characters from a string and return a number. // It works for integer and float. // It expect decimal delimiter to be either a '.' or ',' // Note: everything after an eventual 2nd decimal delimiter will be removed. function stringToNumber($string) { // return 0 if the string contains no number at all or is not a string: if (!is_string($string) || !preg_match('/\d/', $string)) { return 0; } // Replace all ',' with '.': $workingString = str_replace(',', '.', $string); // Keep only number and '.': $workingString = preg_replace("/[^0-9.]+/", "", $workingString); // Split the integer part and the decimal part, // (and eventually a third part if there are more // than 1 decimal delimiter in the string): $explodedString = explode('.', $workingString, 3); if ($explodedString[0] === '') { // No number was present before the first decimal delimiter, // so we assume it was meant to be a 0: $explodedString[0] = '0'; } if (sizeof($explodedString) === 1) { // No decimal delimiter was present in the string, // create a string representing an integer: $workingString = $explodedString[0]; } else { // A decimal delimiter was present, // create a string representing a float: $workingString = $explodedString[0] . '.' . $explodedString[1]; } // Create a number from this now non-ambiguous string: $number = $workingString * 1; return $number; } 46 trên // This function strip spaces and other characters from a string and return a number. // It works for integer and float. // It expect decimal delimiter to be either a '.' or ',' // Note: everything after an eventual 2nd decimal delimiter will be removed. function stringToNumber($string) { // return 0 if the string contains no number at all or is not a string: if (!is_string($string) || !preg_match('/\d/', $string)) { return 0; } // Replace all ',' with '.': $workingString = str_replace(',', '.', $string); // Keep only number and '.': $workingString = preg_replace("/[^0-9.]+/", "", $workingString); // Split the integer part and the decimal part, // (and eventually a third part if there are more // than 1 decimal delimiter in the string): $explodedString = explode('.', $workingString, 3); if ($explodedString[0] === '') { // No number was present before the first decimal delimiter, // so we assume it was meant to be a 0: $explodedString[0] = '0'; } if (sizeof($explodedString) === 1) { // No decimal delimiter was present in the string, // create a string representing an integer: $workingString = $explodedString[0]; } else { // A decimal delimiter was present, // create a string representing a float: $workingString = $explodedString[0] . '.' . $explodedString[1]; } // Create a number from this now non-ambiguous string: $number = $workingString * 1; return $number; } 47. Bạn có thể kiểm tra xem một giá trị số là hữu hạn hay vô hạn bằng cách sử dụng hàm // This function strip spaces and other characters from a string and return a number. // It works for integer and float. // It expect decimal delimiter to be either a '.' or ',' // Note: everything after an eventual 2nd decimal delimiter will be removed. function stringToNumber($string) { // return 0 if the string contains no number at all or is not a string: if (!is_string($string) || !preg_match('/\d/', $string)) { return 0; } // Replace all ',' with '.': $workingString = str_replace(',', '.', $string); // Keep only number and '.': $workingString = preg_replace("/[^0-9.]+/", "", $workingString); // Split the integer part and the decimal part, // (and eventually a third part if there are more // than 1 decimal delimiter in the string): $explodedString = explode('.', $workingString, 3); if ($explodedString[0] === '') { // No number was present before the first decimal delimiter, // so we assume it was meant to be a 0: $explodedString[0] = '0'; } if (sizeof($explodedString) === 1) { // No decimal delimiter was present in the string, // create a string representing an integer: $workingString = $explodedString[0]; } else { // A decimal delimiter was present, // create a string representing a float: $workingString = $explodedString[0] . '.' . $explodedString[1]; } // Create a number from this now non-ambiguous string: $number = $workingString * 1; return $number; } 48 và // This function strip spaces and other characters from a string and return a number. // It works for integer and float. // It expect decimal delimiter to be either a '.' or ',' // Note: everything after an eventual 2nd decimal delimiter will be removed. function stringToNumber($string) { // return 0 if the string contains no number at all or is not a string: if (!is_string($string) || !preg_match('/\d/', $string)) { return 0; } // Replace all ',' with '.': $workingString = str_replace(',', '.', $string); // Keep only number and '.': $workingString = preg_replace("/[^0-9.]+/", "", $workingString); // Split the integer part and the decimal part, // (and eventually a third part if there are more // than 1 decimal delimiter in the string): $explodedString = explode('.', $workingString, 3); if ($explodedString[0] === '') { // No number was present before the first decimal delimiter, // so we assume it was meant to be a 0: $explodedString[0] = '0'; } if (sizeof($explodedString) === 1) { // No decimal delimiter was present in the string, // create a string representing an integer: $workingString = $explodedString[0]; } else { // A decimal delimiter was present, // create a string representing a float: $workingString = $explodedString[0] . '.' . $explodedString[1]; } // Create a number from this now non-ambiguous string: $number = $workingString * 1; return $number; } 49
Tương tự, // This function strip spaces and other characters from a string and return a number. // It works for integer and float. // It expect decimal delimiter to be either a '.' or ',' // Note: everything after an eventual 2nd decimal delimiter will be removed. function stringToNumber($string) { // return 0 if the string contains no number at all or is not a string: if (!is_string($string) || !preg_match('/\d/', $string)) { return 0; } // Replace all ',' with '.': $workingString = str_replace(',', '.', $string); // Keep only number and '.': $workingString = preg_replace("/[^0-9.]+/", "", $workingString); // Split the integer part and the decimal part, // (and eventually a third part if there are more // than 1 decimal delimiter in the string): $explodedString = explode('.', $workingString, 3); if ($explodedString[0] === '') { // No number was present before the first decimal delimiter, // so we assume it was meant to be a 0: $explodedString[0] = '0'; } if (sizeof($explodedString) === 1) { // No decimal delimiter was present in the string, // create a string representing an integer: $workingString = $explodedString[0]; } else { // A decimal delimiter was present, // create a string representing a float: $workingString = $explodedString[0] . '.' . $explodedString[1]; } // Create a number from this now non-ambiguous string: $number = $workingString * 1; return $number; } 43 là viết tắt của Không phải một Số, nhưng nó không kiểm tra xem một giá trị có phải là số hay không. Giá trị // This function strip spaces and other characters from a string and return a number. // It works for integer and float. // It expect decimal delimiter to be either a '.' or ',' // Note: everything after an eventual 2nd decimal delimiter will be removed. function stringToNumber($string) { // return 0 if the string contains no number at all or is not a string: if (!is_string($string) || !preg_match('/\d/', $string)) { return 0; } // Replace all ',' with '.': $workingString = str_replace(',', '.', $string); // Keep only number and '.': $workingString = preg_replace("/[^0-9.]+/", "", $workingString); // Split the integer part and the decimal part, // (and eventually a third part if there are more // than 1 decimal delimiter in the string): $explodedString = explode('.', $workingString, 3); if ($explodedString[0] === '') { // No number was present before the first decimal delimiter, // so we assume it was meant to be a 0: $explodedString[0] = '0'; } if (sizeof($explodedString) === 1) { // No decimal delimiter was present in the string, // create a string representing an integer: $workingString = $explodedString[0]; } else { // A decimal delimiter was present, // create a string representing a float: $workingString = $explodedString[0] . '.' . $explodedString[1]; } // Create a number from this now non-ambiguous string: $number = $workingString * 1; return $number; } 43 được sử dụng cho kết quả của các phép toán không thể thực hiện được trong toán học. Ví dụ: <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>62 sẽ là // This function strip spaces and other characters from a string and return a number. // It works for integer and float. // It expect decimal delimiter to be either a '.' or ',' // Note: everything after an eventual 2nd decimal delimiter will be removed. function stringToNumber($string) { // return 0 if the string contains no number at all or is not a string: if (!is_string($string) || !preg_match('/\d/', $string)) { return 0; } // Replace all ',' with '.': $workingString = str_replace(',', '.', $string); // Keep only number and '.': $workingString = preg_replace("/[^0-9.]+/", "", $workingString); // Split the integer part and the decimal part, // (and eventually a third part if there are more // than 1 decimal delimiter in the string): $explodedString = explode('.', $workingString, 3); if ($explodedString[0] === '') { // No number was present before the first decimal delimiter, // so we assume it was meant to be a 0: $explodedString[0] = '0'; } if (sizeof($explodedString) === 1) { // No decimal delimiter was present in the string, // create a string representing an integer: $workingString = $explodedString[0]; } else { // A decimal delimiter was present, // create a string representing a float: $workingString = $explodedString[0] . '.' . $explodedString[1]; } // Create a number from this now non-ambiguous string: $number = $workingString * 1; return $number; } 43. Tương tự, <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>64 cũng sẽ là // This function strip spaces and other characters from a string and return a number. // It works for integer and float. // It expect decimal delimiter to be either a '.' or ',' // Note: everything after an eventual 2nd decimal delimiter will be removed. function stringToNumber($string) { // return 0 if the string contains no number at all or is not a string: if (!is_string($string) || !preg_match('/\d/', $string)) { return 0; } // Replace all ',' with '.': $workingString = str_replace(',', '.', $string); // Keep only number and '.': $workingString = preg_replace("/[^0-9.]+/", "", $workingString); // Split the integer part and the decimal part, // (and eventually a third part if there are more // than 1 decimal delimiter in the string): $explodedString = explode('.', $workingString, 3); if ($explodedString[0] === '') { // No number was present before the first decimal delimiter, // so we assume it was meant to be a 0: $explodedString[0] = '0'; } if (sizeof($explodedString) === 1) { // No decimal delimiter was present in the string, // create a string representing an integer: $workingString = $explodedString[0]; } else { // A decimal delimiter was present, // create a string representing a float: $workingString = $explodedString[0] . '.' . $explodedString[1]; } // Create a number from this now non-ambiguous string: $number = $workingString * 1; return $number; } 43. Bạn có thể kiểm tra xem giá trị được trả về bởi một phép toán không phải là một số hay không bằng cách sử dụng hàm <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>66
Chuỗi số trong PHP
Giống như PHP tự động thay đổi loại số khác nhau dựa trên cách giá trị của chúng được sử dụng hoặc gán, nó cũng có thể suy ra giá trị của các chuỗi số khác nhau để bạn chuyển đổi chúng thành số
Hàm <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>67 có thể giúp bạn xác định xem một chuỗi hoặc biến có thực sự là số hay không. Hàm này sẽ trả về _______268 cho các số được viết bằng ký hiệu bát phân, nhị phân hoặc thập lục phân. Nó cũng sẽ trả về <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>68 nếu các số được viết theo ký hiệu hàm mũ như <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>30
Bắt đầu từ PHP 7. 0. 0, khi bạn chuyển một chuỗi tới <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>67, nó chỉ trả về <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>68 nếu chuỗi bao gồm một dấu tùy chọn, một số chữ số, một số thập phân tùy chọn và một phần số mũ tùy chọn. Điều này có nghĩa là một chuỗi số được viết ở định dạng thập lục phân hoặc nhị phân sẽ trả về <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>33 từ PHP 7. 0. 0 trở đi
PHP sẽ truyền ngầm bất kỳ chuỗi số hợp lệ nào thành một số khi có nhu cầu. Các ví dụ sau đây sẽ giúp bạn hiểu rõ hơn về quy trình này
<?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>6Như bạn có thể thấy, tất cả các chuỗi số hợp lệ đã được chuyển đổi thành các giá trị tương ứng trước khi thực hiện phép cộng hoặc các phép toán khác. Loại <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>34 cuối cùng phụ thuộc vào giá trị cuối cùng của nó
Trong trường hợp cuối cùng, chuỗi thập lục phân <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>35 không được chuyển đổi thành giá trị thập phân vì PHP 7 không coi đó là một chuỗi số hợp lệ
Truyền chuỗi và số float thành số nguyên
Thỉnh thoảng, bạn sẽ cần truyền một loại giá trị số này sang một loại giá trị khác. PHP có nhiều chức năng và kỹ thuật để làm như vậy. Hầu hết thời gian, việc chuyển đổi sẽ diễn ra ngầm định và bạn sẽ không phải lo lắng về điều đó. Tuy nhiên, nếu bạn phải thực hiện chuyển đổi một cách rõ ràng, các kỹ thuật được đề cập ở đây chắc chắn sẽ hữu ích
Bạn có thể sử dụng <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>36 hoặc <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>37 để chuyển đổi bất kỳ giá trị nào thành số nguyên. Trong trường hợp số float, các giá trị sẽ luôn được làm tròn về 0. Một cách khác để chuyển chuỗi và số thực sang số nguyên là sử dụng hàm <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>38 . Cả <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>36 và <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>38 đều hoạt động theo cùng một cách
<?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>Bạn nên lưu ý rằng việc truyền chuỗi tràn thành số nguyên sẽ đặt giá trị cuối cùng thành giá trị số nguyên tối đa cho phép. Tuy nhiên, việc truyền một số float có giá trị lớn hơn giá trị số nguyên tối đa cho phép sẽ dẫn đến giá trị dao động giữa <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>41 và <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>6
Trong một số tình huống nhất định, bạn có thể cần phải xử lý những con số rất lớn mà không làm mất đi độ chính xác. Ví dụ: không thể có được kết quả chính xác của phép nhân của <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>43 và <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>44 bằng toán tử <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>45 . Nó sẽ cung cấp cho bạn <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>46 sau khi chuyển đổi thả nổi. Việc tính toán câu trả lời thực tế, là <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>47, sẽ yêu cầu sử dụng các thư viện như BCMath. BCMath hoạt động bằng cách lưu trữ các số dưới dạng chuỗi và thực hiện các phép tính số học trên chúng theo cách thủ công. Chỉ cần nhớ rằng nếu bạn sử dụng BCMath, bạn sẽ xử lý các chuỗi thay vì số nguyên và số float
Một số thư viện sẽ muốn bạn chỉ chuyển các số thuộc loại _______43 vào phương thức của họ, nhưng bạn có thể vô tình cung cấp cho họ một giá trị float. Điều này có thể xảy ra vì giá trị có vẻ giống như một số nguyên vì nó không có phần thập phân. Điều này gần như chắc chắn sẽ dẫn đến lỗi nếu thư viện sử dụng hàm như <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>49 để kiểm tra xem số đã truyền có thuộc loại số nguyên hay không. Trong những trường hợp như vậy, trước tiên, bạn nên truyền số đó cho int bằng cách sử dụng <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>36 hoặc <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>38 rồi chuyển số đó tới bất kỳ hàm hoặc phương thức nào của thư viện
Một ví dụ về tình huống như vậy có thể xảy ra khi bạn đang xử lý các hàm toán học như <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>52, <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>53, v.v. <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>52 và <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>53 sẽ luôn trả về một số thực, ngay cả khi bạn chuyển cho chúng một số nguyên
<?php $int_a = 15*12; // Output: int(180) var_dump($int_a); $num = floor($int_a); // Output: float(180) var_dump($num); ?>Một vấn đề với việc chuyển số float thành số nguyên là bạn sẽ mất phần thập phân của số. Điều này có thể hoặc có thể không được mong muốn. Trong những trường hợp như vậy, bạn có thể sử dụng các hàm như <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>52 và chỉ chuyển số sang kiểu int nếu giá trị thực của nó bằng với giá trị được trả về bởi <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>52
// This function strip spaces and other characters from a string and return a number. // It works for integer and float. // It expect decimal delimiter to be either a '.' or ',' // Note: everything after an eventual 2nd decimal delimiter will be removed. function stringToNumber($string) { // return 0 if the string contains no number at all or is not a string: if (!is_string($string) || !preg_match('/\d/', $string)) { return 0; } // Replace all ',' with '.': $workingString = str_replace(',', '.', $string); // Keep only number and '.': $workingString = preg_replace("/[^0-9.]+/", "", $workingString); // Split the integer part and the decimal part, // (and eventually a third part if there are more // than 1 decimal delimiter in the string): $explodedString = explode('.', $workingString, 3); if ($explodedString[0] === '') { // No number was present before the first decimal delimiter, // so we assume it was meant to be a 0: $explodedString[0] = '0'; } if (sizeof($explodedString) === 1) { // No decimal delimiter was present in the string, // create a string representing an integer: $workingString = $explodedString[0]; } else { // A decimal delimiter was present, // create a string representing a float: $workingString = $explodedString[0] . '.' . $explodedString[1]; } // Create a number from this now non-ambiguous string: $number = $workingString * 1; return $number; } 4Giả sử bạn có một thư viện cho phép bạn thực hiện phép tính phân số và thư viện này đưa ra các ngoại lệ khi bạn chuyển một số cho phương thức <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>58 không thuộc kiểu int của nó. Một loạt các thao tác có thể biến một số thành kiểu float ngay cả khi nó vẫn là một số nguyên trong giới hạn tối thiểu và tối đa của kiểu int. Sử dụng một cái gì đó giống như mã ở trên sẽ giúp bạn xử lý các trường hợp như vậy một cách dễ dàng
Mẹo để làm việc với các con số trong PHP
Bản thân các con số có thể lớn vô hạn, nhưng máy tính của chúng ta có bộ nhớ máy tính hạn chế. Điều này có thể dẫn đến các vấn đề khi làm việc với các số trong ngôn ngữ lập trình
Sự cố với số nguyên có kích thước cố định
Số lớn nhất bạn có thể lưu trữ dưới dạng số nguyên tiêu chuẩn trên máy 64 bit là 9223372036854775807. Bất kỳ phép tính nào có kết quả lớn hơn không thể được thực hiện với các số nguyên đơn giản và yêu cầu các giải pháp khác. Điều này có nghĩa là bạn không nên sử dụng số nguyên thông thường khi có khả năng kết quả có thể vượt quá các giới hạn này. Một tùy chọn cho số lớn hơn là sử dụng số dấu phẩy động. Tuy nhiên, chúng có nhược điểm riêng.
Các vấn đề với số dấu phẩy động
Số dấu phẩy động rất phổ biến cho các tính toán hàng ngày. Tuy nhiên, bất cứ điều gì bạn làm với các số dựa vào việc so sánh chúng với nhau đều có thể dẫn đến các vấn đề. Điều này là do các số dấu phẩy động có độ chính xác hạn chế, vì vậy việc so sánh giữa chúng không phải lúc nào cũng hoàn hảo. Không chỉ vậy, nhưng máy tính là hệ thống nhị phân và hệ thống số của chúng tôi là số thập phân. Việc chuyển đổi giữa chúng không phải lúc nào cũng chính xác. Ví dụ: 0. 1 không thể được biểu diễn chính xác dưới dạng nhị phân—tương tự như cách 1/3 không thể được biểu diễn chính xác trong một số chữ số thập phân cố định. Luôn luôn có một số mất độ chính xác.
Đối với các ứng dụng như kết xuất đồ họa hoặc trò chơi, việc mất độ chính xác này không phải là vấn đề. Tuy nhiên, đối với các ứng dụng ngân hàng hoặc thương mại điện tử, nó có thể tạo ra các vấn đề lớn. Một cách để tránh lỗi này là chuyển đổi các số bạn đang làm việc thành số nguyên. Ví dụ: bất kỳ thứ gì có giá 12 đô la. 01 có thể được lưu trữ với các số nguyên bên trong là 1201 xu. Luôn cân nhắc sử dụng số nguyên thông thường thay vì dấu phẩy động khi cần độ chính xác
Số chính xác không giới hạn
Cách tốt nhất để khắc phục những hạn chế được đề cập trong hai điểm trên là lưu trữ các số dưới dạng chuỗi. Một thư viện chính xác tùy ý như BCMath trong PHP có thể giúp bạn điều này. Nó đi kèm với nhiều chức năng hữu ích giúp bạn dễ dàng cộng, trừ, chia và nhân các số rất lớn mà không làm mất đi độ chính xác
<?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>6Như bạn có thể thấy, hàm <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>59 có thể đặt độ chính xác thành một giá trị tùy ý được xác định bởi tham số thứ ba
Tất nhiên, chức năng này phải trả phí—sử dụng BCMath chậm hơn đáng kể so với các kiểu số tích hợp sẵn trong PHP. Tốt nhất là sử dụng các loại số tích hợp trừ khi bạn cần thêm độ chính xác và phạm vi.
Suy nghĩ cuối cùng
Hướng dẫn này đã đề cập đến các cách khác nhau trong đó PHP lưu trữ số và cách bạn có thể xác định xem một số có thuộc loại cụ thể hay không. Ví dụ: bạn có thể sử dụng các hàm như <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>49 và <?php $int_a = 15*12; // Output: int(180) var_dump($int_a); $num = floor($int_a); // Output: float(180) var_dump($num); ?>9 để xác định loại số và tiến hành tương ứng
Như bạn đã thấy trong hướng dẫn, PHP hỗ trợ chuyển đổi kiểu tự động. Điều này có nghĩa là đôi khi các số nguyên nhỏ hơn như <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>62 hoặc <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>63 có thể đã được lưu trữ dưới dạng số thực mà bạn không nhận ra. Việc sử dụng các số này trong các hàm chỉ chấp nhận giá trị <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>3 có thể dẫn đến ngoại lệ hoặc lỗi. Chúng tôi đã biết rằng một giải pháp đơn giản cho vấn đề này là chuyển một cách rõ ràng các số đó thành <?php $float_a = 3598723.8258; $int_cast = (int)$float_a; // Output: 3598723 echo $int_cast; $string_a = "98723.828"; $int_cast = (int)$string_a; // Output: 98723 echo $int_cast; $string_b = "987233498349834828"; $int_cast = (int)$string_b; // Output: 2147483647 on a 32 Bit Machine echo $int_cast; // Output: 987233498349834828 on a 64 Bit Machine echo $int_cast; $float_b = 21474836473492789; $int_cast = (int)$float_b; // Output: -6507212 echo $int_cast; ?>3 nếu chúng không có phần thập phân và giá trị của chúng không thay đổi khi truyền
Sau khi đọc hướng dẫn này, bạn sẽ có thể xác định loại số hoặc loại kết quả cuối cùng sau khi sử dụng nhiều thao tác với các hàm được xác định trước và cũng có thể chuyển chúng thành một loại cụ thể sau khi thực hiện một số kiểm tra
Như mọi khi, nếu bạn có bất kỳ câu hỏi hoặc mẹo bổ sung nào, bạn có thể nhận xét
Học PHP với một khóa học trực tuyến miễn phí
Nếu bạn muốn học PHP, hãy xem khóa học trực tuyến miễn phí của chúng tôi về các nguyên tắc cơ bản của PHP
Trong khóa học này, bạn sẽ học các nguyên tắc cơ bản của lập trình PHP. Bạn sẽ bắt đầu với những kiến thức cơ bản, học cách PHP hoạt động và viết các hàm và vòng lặp PHP đơn giản. Sau đó, bạn sẽ xây dựng các lớp mã hóa để lập trình hướng đối tượng đơn giản (OOP). Đồng thời, bạn sẽ học tất cả các kỹ năng quan trọng nhất để viết ứng dụng cho web. bạn sẽ có cơ hội thực hành phản hồi các yêu cầu GET và POST, phân tích cú pháp JSON, xác thực người dùng và sử dụng cơ sở dữ liệu MySQL