2012-06-20 46 views
8

Đối với một SQL int đang được chuyển đổi thành một phao, làm thế nào để tôi thiết lập độ chính xác của số dấu phẩy động?Độ chính xác điểm nổi của tập hợp SQL

Đây là lựa chọn Tôi muốn cắt ngắn để hai hoặc 3 chữ số thập phân:

AVG(Cast(e.employee_level as Float))avg_level, 

Cảm ơn!

Trả lời

22

Trong TSQL, bạn có thể chỉ định hai kích thước khác nhau cho float, 24 hoặc 53. Điều này sẽ đặt độ chính xác thành 7 hoặc 15 chữ số tương ứng.

Nếu tất cả các bạn muốn làm là cắt ngắn để một số bộ chữ số thập phân, bạn có thể sử dụng ROUND, ví dụ:

ROUND(AVG(CAST(e.employee_level as float)), 3) 
+2

Lưu ý rằng nếu bạn sử dụng phao (n) cho một số n khác với 24 hoặc 53, số này được làm tròn thành 24 hoặc 53 – Bort

1

Theo nguyên tắc chung, bạn không thể chỉ định số chữ số sau dấu thập phân cho một số dấu phẩy động. Các kiểu dữ liệu dấu chấm động lưu trữ xấp xỉ dấu phẩy động gần nhất với bất kỳ giá trị đã cho nào. Khoảng gần đúng nhất của dấu phẩy động gần nhất không có số chữ số bạn muốn. Mặc dù bạn có thể chặn mọi chữ số sau chữ số thứ ba, điều đó sẽ chỉ thay đổi hình thức của giá trị chứ không thay đổi giá trị của chính nó.

Số nguyên là một câu chuyện khác. Một số nguyên - được lưu trữ, chuyển đổi hoặc truyền sang kiểu dữ liệu dấu chấm động - sẽ được lưu trữ chính xác trên một phạm vi rộng. Các kiểu dữ liệu dấu chấm động không phải lưu trữ bất kỳ đơn vị phân số nào cho các số nguyên.

tôi muốn đề nghị, dù rằng thực hành tốt nhất cho bạn là

  • tránh đúc nguyên để dấu chấm động nếu bạn không cần đơn vị phân đoạn, hoặc
  • số nguyên dàn diễn viên để thập phân hoặc số nếu bạn làm cần các đơn vị phân đoạn hoặc
  • xử lý hoàn toàn các vấn đề về hiển thị trong mã ứng dụng.
Các vấn đề liên quan