Gỡ lỗi một số mã SQL liên quan đến tài chính đã tìm thấy một vấn đề lạ với độ chính xác toán học số (24,8).SQL server 2005 mất chính xác số
Chạy truy vấn sau đây trên MSSQL của bạn, bạn sẽ nhận được một kết quả biểu hiện * C + B để được 0,123457
CHỌN A, B, C, A + B * C TỪ ( CHỌN CAST (0.12345678 AS NUMERIC (24,8)) AS A, CAST (0 AS NUMERIC (24,8)) AS B, CAST (500 AS NUMERIC (24,8)) AS C ) T
Vì vậy, chúng tôi đã mất 2 biểu tượng quan trọng. Cố gắng để có được điều này cố định theo những cách khác nhau tôi đã nhận rằng chuyển đổi của các kết quả nhân trung gian (đó là Zero!) Để số (24,8) sẽ làm việc tốt.
Và cuối cùng là giải pháp. Nhưng tôi vẫn còn một câu hỏi - tại sao MSSQL cư xử theo cách này và những chuyển đổi loại thực sự xảy ra trong mẫu của tôi?
ý bạn là NUMERIC (32,6)) ?? Nếu số tiền phải là 38 – Edmondo1984
@ Edmondo1984 Vui lòng đọc các liên kết và hiểu ý nghĩa của cả hai số. –
Bạn nói rằng khi nhân hai số (24,8) máy chủ sẽ cố gắng tiết kiệm 16 bit và tạo ra một (32,6), làm thế nào nó trở thành một 38,6?Cảm ơn – Edmondo1984