2010-10-02 41 views
5

Tôi có một bảng SQLite3 với một cột có định dạng DECIMAL (7.2), nhưng bất cứ khi nào tôi chọn các hàng có giá trị không có số thập phân thứ 2 khác (ví dụ 3.00 hoặc 3.10), kết quả luôn luôn có dấu 0 (s) thiếu (ví dụ 3 hoặc 3,1). Có cách nào mà tôi có thể áp dụng một chức năng định dạng trong câu lệnh SELECT để tôi nhận được 2dp yêu cầu không? Tôi đã thử ROUND(), nhưng điều này không có hiệu lực. Nếu không, tôi phải tiếp tục chuyển đổi các giá trị cột kết quả thành định dạng yêu cầu để hiển thị (sử dụng Python trong trường hợp của tôi) mỗi khi tôi thực hiện một câu lệnh SELECT, đó là một nỗi đau thực sự.Vấn đề về số thập phân với SQLite

Tôi thậm chí không quan tâm nếu kết quả là chuỗi thay vì số, miễn là nó có số chữ số thập phân phù hợp.

Mọi trợ giúp sẽ được đánh giá cao.

Alan

+0

Nếu bạn định viết một hàm để làm điều này, hàm FORMAT() phù hợp sẽ tiện dụng :) – MikeAinOz

Trả lời

4

SQLite nội bộ sử dụng IEEE nhị phân số học dấu chấm động, mà thực sự không tự vay cũng để duy trì một số lượng cụ thể của số thập phân. Để nhận được rằng loại xử lý số thập phân sẽ yêu cầu một trong số:

  1. cố định điểm toán học, hoặc
  2. IEEE thập phân dấu chấm động (chứ không phải không phổ biến), hoặc
  3. Xử lý tất cả mọi thứ như dây đàn.

Định dạng giá trị (chuyển đổi từ dấu phẩy động thành chuỗi) sau khi trích xuất là cách đơn giản nhất để thực hiện mọi thứ. Bạn thậm chí có thể giấu nó bên trong một số loại wrapper để phần còn lại của mã không phải đối phó với hậu quả. Nhưng nếu bạn định làm số học về giá trị sau đó thì tốt hơn là không định dạng và thay vào đó làm việc với giá trị được trả về bởi truy vấn, vì định dạng và ngược lại điểm nhị phân (mà Python sử dụng, giống như phần lớn các ngôn ngữ hiện đại khác) mất rất nhiều thông tin về độ chính xác đã giảm.

+0

Cảm ơn Donal - Tôi bắt đầu suy nghĩ theo cùng một dòng, nhưng bạn đã làm cho nó rõ ràng hơn. Tôi sẽ phát triển hàm display_format (hàng) chuyển đổi mỗi giá trị hàng thành định dạng hiển thị chính xác theo cấu trúc dữ liệu như được chỉ định trong bảng pragma (điều này chủ yếu áp dụng cho các cột có số thập phân và ngày tháng). Trân trọng. –

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