2013-09-26 52 views
5

Mục đích chính cho giới hạn tối đa cho số trong php và mysql là gì?
Điều này có nghĩa là chúng tôi có thể/không thể xử lý hoặc lưu trữ số lớn hơn giới hạn không?mục đích của số tối đa trong php & mysql

Tôi echo PHP_INT_MAX và hiển thị 2147483647.

Tôi nhân với 1000000000000000000000 và nhận câu trả lời như 2.147483647E+30 mà tôi nghĩ đã vượt quá giới hạn?

Vui lòng thông báo.

Rất cám ơn bạn đã hướng dẫn.

Câu hỏi này phát sinh khi tôi đang suy nghĩ về việc xác thực đầu vào biểu mẫu người dùng. Tôi muốn đảm bảo rằng đầu vào của người dùng theo định dạng số được xác định của chúng tôi chứ không phải định dạng khác.
Sau đó, tôi thực hiện một số tìm kiếm trực tuyến để thực hành tốt nhất và nhận thức được "giới hạn" này nhưng không biết cách xử lý chính xác khi sử dụng PHP & MYSQL. Xin vui lòng tư vấn:

Bước 1: cắt và chuyển đổi đầu vào biểu mẫu người dùng "số chuỗi" thành số.
Bước 2: xác thực số ở định dạng số nguyên dương.
Bước 3: xác thực số không vượt quá "giới hạn tối đa" của tôi.
Vì giới hạn php (2.147.483.647) nhỏ hơn giới hạn mysql (18.446.744.073.709.500.000)? tôi sẽ lấy php là giới hạn tối đa của tôi.
Bước 4: thực hiện một số tính toán ...
Bước 5: xác thực kết quả của tôi không vượt quá giới hạn tối đa.
Bước 6: lưu trữ kết quả trong mysql.

+0

Giới hạn số nào? Bạn có nghĩa là, ví dụ, rằng một biến số nguyên chỉ có thể giữ số để một giá trị nhất định? – michaelward82

+0

Mục đích là điền ít byte hơn. Một tinyint unsigned chỉ dài 8 bit (1 byte), và giá trị cao nhất là 255 (11111111), trong khi chúng ta sử dụng nhiều byte hơn, chúng ta càng sử dụng nhiều bộ nhớ. – h2ooooooo

+0

Đó là vì các số thường được lưu trữ dưới dạng các số nguyên hoặc dấu phẩy 32 bit hoặc 64 bit, do đó chúng bị giới hạn bởi số bit được sử dụng để lưu trữ chúng –

Trả lời

3

Đó là giới hạn phần cứng của CPU. Bạn vẫn có thể sử dụng chức năng bc math để làm việc với số lượng lớn hơn. Trong mysql, nó sắp xếp các byte, vì vậy nó biết tại đó bù đắp là cột nào.

Kết quả nhân được chuyển đổi thành float.

1

PHP_INT_MAX là hằng số lớn nhất integer bạn có thể sử dụng trên bản dựng PHP này (32 bit trong trường hợp của bạn). Nếu hệ điều hành và CPU của bạn hỗ trợ 64 bit, bạn có thể sử dụng một bản dựng 64 bit của PHP để hỗ trợ một số lớn hơn nhiều trong một số nguyên. (Điều này gây ra vấn đề mà các nhà phát triển đã thiết kế mã của họ xung quanh các giới hạn của bản dựng 64 bit và sau đó được sử dụng trên các bản dựng 32 bit, giả định loại vấn đề.)

Khi bạn nhân số bằng một lớn hơn, PHP nhận ra điều này giá trị mới sẽ không vừa với số integer và chuyển đổi loại thành long hoặc float. Trong trường hợp sau, bạn sẽ mất một số độ chính xác, vì vậy điều quan trọng là bạn cẩn thận khi xem xét mã của bạn ảnh hưởng như thế nào đến các loại biến. Trong một số ngôn ngữ, bạn sẽ nhận được lỗi khi cố đặt giá trị lớn hơn mức được phép theo loại đó, vì ngôn ngữ sẽ từ chối thay đổi loại tự động cho bạn. Theo cách này, PHP là một ngôn ngữ lập trình cơ bản hơn để sử dụng.

<?php 
$my_number = PHP_INT_MAX; 
var_dump(gettype($my_number), $my_number); 
$my_number = $my_number * 1000000000000000000000; 
var_dump(gettype($my_number), $my_number); 

Output: 
string(7) "integer" 
int(2147483647) 
string(6) "double" 
float(2.147483647E+30) 
0

Trong thế giới của máy tính, có nhiều giới hạn dựa trên các mô hình toán học của các phần cứng máy tính, chúng tôi sử dụng.

Ví dụ, nếu chúng tôi quyết định để đại diện cho một số nguyên trong 1 bit của bộ nhớ, sau đó chúng tôi sẽ có thể đại diện cho những con số 0 và 1.

Nếu chúng ta tăng rằng các giá trị phổ biến hơn 8, 16, 32 hoặc 64 bits sau đó chúng ta có thể đại diện cho số sau đây của giá trị khác biệt:

  • 2^8 - 256,
  • 2^16 - 65,536,
  • 2^32 - 4,294,967,296,
  • hoặc 2^64 - 18,446,744,073,709,551,616.

Tất nhiên, nếu chúng ta muốn thể hiện số âm thì chúng ta có thể ký số nguyên (sử dụng một bit để biểu thị số âm hoặc dương). Trong trường hợp của 32 bit signed integer, điều này sẽ cho phép chúng tôi đại diện cho các số: −(2^31) đến 2^31 − 1 hoặc -2,147,483,648 đến +2,147,483,647 (cùng giới hạn trên với số trong câu hỏi của bạn).

Số nguyên được cho là dạng biểu diễn số đơn giản nhất trong hệ thống máy tính (ngoài nhị phân thẳng), nhưng do giới hạn cố hữu của hệ thống, chúng ta thường cần sử dụng các hệ thống khác cho số lớn hơn. số nguyên. PHP sẽ chuyển từ sử dụng số nguyên sang sử dụng floating point numbers khi vượt quá giới hạn.

Giới hạn bạn thấy trong PHP được biên dịch và sẽ phụ thuộc vào kiến ​​trúc của trình biên dịch. Có vẻ như PHP của bạn đã được biên dịch thành 32 bit.

Bạn có thể đọc nhiều hơn trên computer number systems on Wikipedia.