Tôi có tập hợp các phép tính sau trong excel mà tôi muốn có thể sử dụng trong quy trình được lưu trữ.Độ chính xác của dấu chấm động SQL được giới hạn trong 6 chữ số
Excel
CellA: 45/448.2 = 0.100401606425703
CellB: 1-CellA = 0.899598393574297
CellC: 1-CellB = 0.100401606425703
CellD: CellC * 448.2 = 45.000000000000000
Trong SQL Tôi đang làm như sau:
declare @a decimal(18,15) = 45/448.2
declare @b decimal(18,15) = [email protected]
declare @c decimal(18,15) = [email protected]
declare @d decimal(18,15) = @c * 448.2
Tôi cũng đã cố gắng chạy tính toán trong một dòng
declare @e decimal(18,15) = (1-(1-(45/448.2)))*448.2
khi tôi trở về các giá trị SQL cung cấp cho tôi những điều sau đây:
@a: 0.100401000000000
@b: 0.899599000000000
@c: 0.100401000000000
@d: 44.999728200000000
@e: 44.999728200000000
Tôi đã thử điều chỉnh độ chính xác của số thập phân trong SQL nhưng không có gì tạo nên sự khác biệt, nó chỉ trả về 6 chữ số đầu tiên của số thập phân.
Excel có thực hiện bất kỳ tối ưu hóa nào khi chạy công thức không?
Bất kỳ ý tưởng nào?
Hãy thử, nói, 'CHỌN 45/CAST (448,2 AS DECIMAL (18,1)) '. [Các liên kết ở đây] (http://stackoverflow.com/a/5385417/73226) cho bạn biết các quy tắc cho kiểu dữ liệu kết quả của phép chia. –
@MartinSmith cung cấp cho tôi số thập phân hoàn chỉnh hơn cho @a, mặc dù câu trả lời của tôi là 45.000000000000085 bạn có thể giải thích lý do không? – ScampDoodle
Nó được giải thích trong hai liên kết từ câu trả lời trước đó mà tôi đã quá lười để tái tạo ở trên. 'e1/e2 cho p = p1 - s1 + s2 + tối đa (6, s1 + p2 + 1), s = max (6, s1 + p2 + 1)'. Nếu 'p' sẽ là'> 38' thì 's' bị cắt ngắn tại' 6' –