2012-08-29 25 views
6

PHP chạy tập lệnh để tính toán giá trị một cách chính xác. Khi tôi lặp lại giá trị đó, nó xuất hiện dưới dạng 4.865472349Loại SQL nào tôi nên sử dụng để nhập giá trị 4.865472349

Sau đó, một tập lệnh cập nhật đơn giản được sử dụng để nhập giá trị vào cơ sở dữ liệu của tôi.

$query = "UPDATE members 
    SET rating = $r 
    WHERE username = '$username'"; 
mysql_query($query); 

Khi tôi làm điều này, các giá trị được nhập vào cơ sở dữ liệu là 5.

Nếu tôi thay thế $ r trong công thức trước với 4,865472349 trực tiếp, nó tạo ra kết quả tương tự.

Rõ ràng điều này là do kiểu SQL của tôi đã được thiết lập để "số nguyên"

Nhưng Im không chắc chắn những gì để thay đổi nó để để khắc phục vấn đề này. Bất kỳ giúp đỡ?

+1

cơ sở dữ liệu Những gì bạn đang sử dụng? Phạm vi giá trị được phép của bạn là bao nhiêu? Bạn cần độ chính xác nào? – RedFilter

+1

Đã thêm thẻ mysql vì dòng 'mysql_query'. –

Trả lời

3

Bạn có thể nên sử dụng DOUBLE. Nó có cùng độ chính xác và phạm vi như các số dấu chấm động trong PHP (trong hầu hết các cấu hình).

Để chuyển loại sử dụng PHPMyAdmin:

  1. Bấm trên bàn
  2. Bấm vào cấu trúc
  3. Bấm vào Change (biểu tượng bút chì) bên cạnh giá
  4. Trong "Loại" chọn tùy chọn "DOUBLE"
  5. Nhấn Lưu
+0

Tôi muốn sử dụng số thập phân, do đó bạn không gặp vấn đề gì với Floating Point arithmatic sau này. – CaffGeek

+0

+1. DOUBLE là con đường để đi, miễn là bạn không quan tâm đến xấp xỉ thập phân. Nếu bạn cần các giá trị thập phân chính xác, không có xấp xỉ và bạn có phạm vi giới hạn cho giá trị lớn nhất, vì vậy bạn có thể sống trong một SCALE và PRECISION nhất định, sau đó 'DECIMAL' là cách để đi. – spencer7593

0

Chỉnh sửa col umn loại trong cơ sở dữ liệu để có thể giữ nhiều hơn chỉ là một số nguyên.

ALTER TABLE members 
CHANGE rating rating float(10,9); 
+0

Đó là cho mysql. –

+0

Bất kỳ lời khuyên nào về việc thực hiện điều này trong phpmyadmin – user187680

+0

chọn cơ sở dữ liệu và tìm cột sql và sao chép, dán, thực thi.Có một cách gui làm quá. Có lẽ một cái gì đó giống như bảng chỉnh sửa và thay đổi loại cột từ INT thành float (10,9) –

0

Bạn có thể sử dụng float, double hoặc thập phân tùy thuộc vào số bạn sẽ lưu trữ. Tôi sẽ nói phao là đủ tốt.

3

Nếu bạn muốn độ chính xác tương tự như 4,865472349, bạn có thể sử dụng DECIMAL (10,9)

Reference

Ví dụ, một DECIMAL (18,9) cột có chín chữ số ở hai bên của dấu thập phân, vì vậy phần nguyên và phần phân số mỗi yêu cầu 4 byte. Cột DECIMAL (20,6) có mười bốn chữ số nguyên và sáu chữ số thập phân. Các chữ số nguyên yêu cầu bốn byte cho chín chữ số và 3 byte cho năm chữ số còn lại. Sáu chữ số phân số yêu cầu 3 byte.

Giả sử bạn đang sử dụng MySql

+0

+1. Loại DECIMAL là con đường để đi, nếu bạn có một phạm vi giới hạn (giá trị tối đa), và có thể sống với một phạm vi được chỉ định cho QUY MÔ và CHÍNH XÁC. Nếu không, một DOUBLE sẽ cung cấp phạm vi lớn hơn nhiều, nhưng với một số sự thiếu chính xác (xấp xỉ) trong việc lưu trữ và truy lục các giá trị thập phân. – spencer7593

Các vấn đề liên quan