הבעיה של עיגול ב- SQL

SQL יש שלוש פונקציות עיגול.

עיגול קונבנציונאלי

הפונקציה "ROUND ()" SQL לוקחת ערך קיים ומסובבת אותו למספר המצוין של מקומות עשרוניים. הפורמט הוא כדלקמן:

ROUND ([value], [n], [1]))

כאן, "[value]" הוא ערך עשרוני, ו- "n" הוא מספר הספרות שאליו יש לעגל את הערך. פונקציה זו מעגלת ערכים של 0.5 או יותר, וערכים של 0.49 או פחות כלפי מטה. בחירת הערך "0" מעוגל לערכים שלמים. בחירת ערך "-11" סיבובים למספר של הקרוב 10. הפרמטר השלישי של הפונקציה "ROUND ()", "[1]", חותך את המספר עם המספר המצוין של מקומות אחרי הנקודה העשרונית אם נבחר ערך שאינו אפס. מקור משמעותי לבעיות עיגול בלתי צפויות הוא קיבוע הפרמטר השלישי על ידי שגיאות דפוס, לפיה מספר התוצאה הוא חתוך במקום מעוגלות.

קומה והתקרה

SQL משתמש בפונקציה "FLOOR ()" כדי לאלץ את העיגול כלפי מטה של ​​הערכים למספר השלם הקרוב ביותר, ואת הפונקציה "CEILING ()" כדי להגיע לערך הקרוב ביותר. שתי הפונקציות מחזירות ערכים שלמים. גם באמצעות סוג נתונים צף עם מספר מסוים של מקומות אחרי הנקודה העשרונית, פונקציות אלה מחזירות ערך עם אפסים לאחר המיקום העשרוני.

סוגי הנתונים המומלצים

הסיבה הסבירה ביותר להופעת שגיאות העיגול ב- SQL היא שימוש בסוג נתונים לא צפוי עבור הביטוי המספרי בפונקציה "ROUND ()" או "שימוש ב- FLOOR () או" CEILING () "כאשר אתה מצפה לקבל סוג נתונים עשרוניים במקום מספר שלם. אם פונקציית ה- SQL שלך מעניקה לך תוצאות מעגל בלתי צפויות, ודא שהפונקציה "CAST ()" שמציינת את המספר כוללת את סוג הנתונים "מספר שלם", "עשרוני", "כסף" או "smallmoney". סוג הנתונים "עשרוני" מוגבל ל -38 ספרות בסך הכל, מגבלה שמשפיעה על מעט אנשים מחוץ לקהילה המדעית.

סוגים אחרים של נתונים

קיימים שני סוגים של נתונים המחזירים ערכים מספריים ויכולים לגרום לבעיות בפונקציה "ROUND ()". הם סוגי "אמיתי" ו "לצוף" מספרי ב- SQL, אשר משמשים לאחסון שברים קטנים מאוד כי הם מעוגלים ברוב הגרסאות של SQL, עם המקום העשרוני האחרון בסוג הנתונים המצוין. כמה יישומים של סיבוב SQL לאפס, למטה או באופן מסורתי. כאשר אתה מקבל נתונים במסד נתונים של SQL שעשויים להשתמש בסוגי "Real" או "float", השתמש בפונקציות CAST () או "CONVERT ()" כדי להמיר אותם לסוגי נתונים "עשרוניים".