คำถามนั้นค่อนข้างง่าย ฉันต้องการคำนวณ 3 คอลัมน์ที่ผลลัพธ์กลางคือทศนิยมมากและฉันพบปัญหาในช่วงต้นกับ SQL Server โดยทั่วไปการปัดเศษทศนิยมโดยไม่คำนึงถึงการแปลง / แปลงใด ๆ
ตัวอย่างเช่นลองทำหารง่าย ๆ เป็น 1234/1233 เครื่องคิดเลขจะผลิต 1,00081103000811 แต่เมื่อฉันทำเช่นนี้บน SQL Server เราได้รับต่อไปนี้:
-- Result: rounded at 1.000811000... with trailing zeroes up until the 37 precision
SELECT CAST(CAST(1234 AS DEC(38,34))/CAST(1233 AS DEC(38,34)) AS DEC(38,37))
-- Result: rounded at 1.000811
SELECT CONVERT(DECIMAL(38,32), 1234)/CONVERT(DECIMAL(38,32),1233)
-- Correct result at 1,00081103000811
-- But this requires the zeroes to be put in manually when you don't
-- even know the precision of the end result
SELECT 1234.0/1233.00000000000000
เหตุใดการปัดเศษอัตโนมัตินี้จึงเกิดขึ้น และวิธีที่ดีที่สุดในการคำนวณค่าทศนิยมที่ยาวอย่างไม่น่าเชื่อคืออะไรเมื่อคุณไม่แน่ใจว่าจะมีจำนวนเท่าใด (ส่วน int หรือส่วนธันวาคม) เนื่องจากตารางสามารถมีค่าที่แตกต่างกันได้บ้าง
ขอบคุณ!