2011-12-28 36 views
5

Tôi phải đại diện cho các số trong cơ sở dữ liệu của mình, là số lượng các chất hóa học trong thực phẩm, như chất béo, năng lượng, magiê và các chất khác. Các giá trị này là số thập phân ở định dạng 12345.67.Loại dữ liệu chính xác mà tôi nên sử dụng trong trường hợp này là gì?

Nếu tôi sử dụng decimal (5,2) làm loại dữ liệu trong SQL Server, nó ánh xạ tới loại Decimal trong Khuôn khổ thực thể. Nếu tôi sử dụng float làm kiểu dữ liệu trong SQL Server, nó ánh xạ tới Double trong khung thực thể.

Tôi không chắc loại dữ liệu tốt nhất trong SQL Server sẽ phải là gì, hoặc không thực sự quan trọng?

EDIT - trong trường hợp của tôi, nó phải là decimal(7,2), như đã đề cập trong một số nhận xét!

Cảm ơn.

+3

'DECIMAL' thường được ưa thích - nó không cản với các lỗi làm tròn như 'FLOAT' –

+2

Kiểm tra http://stackoverflow.com/questions/618535/what-is-the-difference-between-decim al-float-và-double-in-c – gsharp

+0

nếu bạn muốn độ chính xác và có một số hữu hạn các giá trị mong đợi sau thập phân, hãy sử dụng số thập phân nếu bạn không quan tâm đến độ chính xác sử dụng phao. tìm kiếm trên thập phân vs phao để xem lý do tại sao. – xQbert

Trả lời

10

Bạn cần decimal(7,2)

  • 7 là tổng số chữ số
  • 2 là sau dấu thập phân

Sự khác biệt:

  • float là xấp xỉ và sẽ cung cấp kết quả bất ngờ
  • thập phân là chính xác

Tài liệu tham khảo:

+0

Cảm ơn bạn. Tôi đọc rằng thập phân là loại chính xác nhất, nhưng nếu tôi sử dụng thập phân (7,2), nó có nghĩa là không có nhiều lưu trữ là cần thiết trong máy chủ sql? Trong trường hợp đó, tôi cũng đọc rằng thập phân là chậm nhất để làm việc với trong. NET, điều này có thể trở thành một vấn đề nếu tôi cần những con số này trong tính toán? –

+1

@Lud: decimal (7,2) yêu cầu bộ nhớ 9 byte. float là 8 byte. Không có nhiều sự khác biệt về độ chính xác. Tôi sẽ không lo lắng về hiệu suất trong .net trừ khi bạn có một lượng lớn dữ liệu. Thậm chí sau đó, việc xử lý toán học net của đôi là tốt hơn nhiều so với SQL Server, do đó bạn có thể lưu trữ số thập phân trong cơ sở dữ liệu nhưng quá trình in.net đôi nếu cần thiết – gbn

+0

@Cicada, không hiểu bình luận của bạn ... đó là một ứng dụng kinh doanh, vì thế..? –

4

DECIMAL(7,2) sẽ tốt hơn float - đó chính xác là những gì bạn cần (5 + 2 chữ số). Với các loại nổi (ví dụ: float, double), bạn có thể có một số vấn đề - ví dụ: với làm tròn.

+0

Thực ra: 'DECIMAL (5,2)' có nghĩa là: 5 chữ số ** trong tổng số ** - hai trong số đó sau dấu thập phân - vì vậy nó thực sự là 3 + 2 chữ số (** NOT ** 5 + 2)! –

+0

Ok, và điều này có gây ra các vấn đề về hiệu suất trong các phép tính khi tôi đọc số thập phân đó là loại chậm nhất trong .NET không? –

+0

DECIMAL (5,2) chỉ có thể lưu trữ ở mức tối đa 999,99, nó là tổng số 5 chữ số với thang tỷ lệ hai số thập phân (http://msdn.microsoft.com/en-us/library/ms187746.aspx) –

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