ฉันจะตีความความแม่นยำและมาตราส่วนของตัวเลขในฐานข้อมูลได้อย่างไร


245

ฉันมีคอลัมน์ต่อไปนี้ระบุไว้ในฐานข้อมูล: ฐานสิบ (5,2)

คนเราตีความสิ่งนี้ได้อย่างไร

ตามคุณสมบัติในคอลัมน์ตามที่ดูในสตูดิโอการจัดการเซิร์ฟเวอร์ SQL ฉันจะเห็นว่ามันหมายถึง: ทศนิยม (ความแม่นยำเป็นตัวเลขขนาดสเกลตัวเลข)

ความแม่นยำและสเกลหมายถึงอะไรในแง่ของจริง

มันจะง่ายต่อการตีความนี้เป็นทศนิยมที่มี 5 หลักและสองตำแหน่งทศนิยม ... เช่น 12345.12

ป.ล. ฉันสามารถระบุคำตอบที่ถูกต้องจากเพื่อนร่วมงานได้ แต่มีปัญหาในการหาคำตอบออนไลน์ เช่นนี้ฉันต้องการมีคำถามและคำตอบเอกสารที่นี่ใน stackoverflow สำหรับการอ้างอิงในอนาคต

คำตอบ:


396

ความแม่นยำของตัวเลขหมายถึงจำนวนหลักสูงสุดที่มีอยู่ในจำนวนนั้น

เช่น 1234567.89 มีความแม่นยำ 9

สเกลตัวเลขหมายถึงจำนวนสูงสุดของตำแหน่งทศนิยม

เช่น 123456.789 มีขนาดเท่ากับ 3

ดังนั้นค่าสูงสุดที่อนุญาตสำหรับทศนิยม (5,2) คือ 999.99


14
อย่าลืมว่าถ้าคุณใช้ระบบที่ช่วยให้คุณกำหนดความแม่นยำและมาตราส่วนของอินพุตสำหรับเปอร์เซ็นต์ในบางสิ่งบางอย่างเช่น Microsoft Access ได้คุณต้องพิจารณาเปอร์เซ็นต์เป็นรูปแบบตัวเลขทั้งหมด ในกรณีนี้ 25.5% จะต้องการความแม่นยำ 4 และมาตราส่วน 3 (ไม่ใช่หนึ่ง) เนื่องจากเราต้องพิจารณาเป็น. 255 ฉันเจอปัญหานี้ แต่เนิ่น ๆ และก็นิ่งงันอยู่พักหนึ่งสงสัยว่าเพราะเหตุใดสเกล 1 จึงไม่ทำงาน
Ashton Sheets

1
@mezoid ค่าสเกลลบหมายถึงอะไร
Geek

@Geek ตามtechnet.microsoft.com/en-us/library/ms187746.aspxขนาดต้องไม่น้อยกว่าศูนย์ 0 <= สเกล <= ความแม่นยำ โดยพื้นฐานแล้วค่าสเกลเชิงลบจะไม่มีความหมาย
mezoid


1
ไม่ควร: "ความแม่นยำเชิงตัวเลขหมายถึงจำนวนหลักสูงสุดที่อาจมีอยู่ในจำนวนนั้น"? จำนวนที่แน่นอน 123.5 อาจมีความแม่นยำ 10 เช่นกัน แต่ไม่มีตัวเลขเพิ่มเติมที่จะเพิ่ม หรือนี่จะกลายเป็น 123.5000000
Chris311

86

ความแม่นยำของตัวเลขคือจำนวนหลัก

สเกลของตัวเลขคือจำนวนหลักหลังจุดทศนิยม

โดยทั่วไปสิ่งที่บ่งบอกถึงเมื่อตั้งค่าความแม่นยำและมาตราส่วนตามคำจำกัดความของฟิลด์คือค่าเหล่านั้นแสดงถึงค่าสูงสุด

ตัวอย่างฟิลด์ทศนิยมที่กำหนดด้วยprecision=5และscale=2จะอนุญาตค่าต่อไปนี้:

  • 123.45 (p = 5, S = 2)
  • 12.34 (p = 4, S = 2)
  • 12345 (p = 5, S = 0)
  • 123.4 (p = 4, S = 1)
  • 0 (p = 0, s = 0)

ไม่อนุญาตให้ใช้ค่าต่อไปนี้หรืออาจทำให้ข้อมูลสูญหาย:

  • 12.345(p = 5, s = 3) => สามารถถูกตัดเป็น12.35(p = 4, s = 2)
  • 1234.56(p = 6, s = 2) => สามารถถูกตัดทอนลงใน1234.6(p = 5, s = 1)
  • 123.456(p = 6, s = 3) => สามารถถูกตัดเป็น123.46(p = 5, s = 2)
  • 123450 (p = 6, s = 0) => อยู่นอกช่วง

โปรดทราบว่าช่วงที่กำหนดโดยทั่วไปมีความแม่นยำ: |value| < 10^p...


5
โปรดทราบว่า MS SQL Server จะไม่อนุญาตให้ 12345 หรือ 1234.56 เนื่องจาก "[scale] ถูกแทนที่จาก [ความแม่นยำ] เพื่อกำหนดจำนวนสูงสุดของตัวเลขทางด้านซ้ายของจุดทศนิยม (ที่มา: ทศนิยมและตัวเลข )
molnarm

แล้วไง12345000ล่ะ ความแม่นยำ 5 หรือ 8? ถ้า 5 ด้วยมาตราส่วนอะไร สเกล -3?
towi

@towi นั่นหมายความว่าอย่างไร หากคุณต้องการเก็บไว้คุณจะใช้ 8,0
Rob Grant

คำตอบที่ดี แต่ทำไมอยู่123450 (p=6,s=0)นอกช่วง 123450 มี 6 หลักและไม่มีตัวเลขหลังจากจุด?
Matthias Burger

1
@MatthiasBurger 123450 (p=6,s=0)จะอยู่นอกช่วงสำหรับฟิลด์ทศนิยมที่มีความแม่นยำ 5 ประการ (ดังที่กล่าวไว้ในตัวอย่าง) เนื่องจากความแม่นยำของตัวเลขที่คุณต้องการจัดเก็บในเขตข้อมูลจะต้องน้อยกว่าหรือเท่ากับความแม่นยำของเขตข้อมูล
Snozzlebert

26

ความแม่นยำระดับและความยาวในเอกสารประกอบของ SQL Server 2000 อ่าน:

ความแม่นยำคือจำนวนตัวเลขในจำนวน สเกลคือจำนวนหลักทางด้านขวาของจุดทศนิยมในตัวเลข ตัวอย่างเช่นหมายเลข 123.45 มีความแม่นยำ 5 และมาตราส่วน 2


ขอบคุณ. ฉันเพิ่งรู้ว่าชิ้นส่วนของรหัส Delphi / Pascal ใช้มาตราส่วน 0 เพื่อตัดส่วนทศนิยมของ float
peterchaula
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.