概述:
浮點資料型別包括real型、float型、decimal型和numeric型,浮點資料型別用于存盤十進制小數,
在SQL Server 中浮點數值的資料采用上舍入(Round up)的方式進行存盤,所謂上舍入也就是,要舍入的小數部分不論其大小,
只要是一個非零的數,就要在該數字的最低有效位上加1,并進行必要的進位,
由于浮點資料為近似值,所以并非資料型別范圍內的所有資料都能精確地表示,
1、區別說明

decimal(numeric):同義,用于精確存盤數值
float 和 real:不能精確存盤數值
2、real資料型別
real型資料的存盤大小為4個位元組,可精確到小數點后第7位數字,
這種資料型別的資料存盤范圍為從-3.40E+38~-1.18E-38,0和1.18E-38~3.40E+38,
在MSSQL中real的同義詞是float,用法幾乎一樣,
3、float資料型別
float型的資料存盤大小為8個位元組,可精確到小數點后第15位數字,
這種資料型別的資料存盤范圍為從-1.79E+308~-2.23E-308,0和2.23E+308~1.79E+308,
FLOAT(size,d) 帶有浮動小數點的小數字,在括號中規定最大位數,在 d 引數中規定小數點右側的最大位數,
float型的資料可寫成float[(n)]的形式,其中n是1~15之間的整數值,指定float型資料的精度,當n為1~7時,實際上用戶定義了一個real型的資料,系統用4個位元組存盤;
當n為8~15時,系統認為它是個float型的資料,用8個位元組存盤它,這樣既增強了資料定義的靈活性,又節省了空間,
4、decimal(numeric)資料型別
decimal資料型別和numeric資料型別的功能完全一樣,它們都可以提供小數所需要的實際存盤空間,
但也有一定的限制,用戶可以用2~17個位元組來存盤資料,取值范圍是-1038+1~1038-1,
DECIMAL(size,d) 作為字串存盤的 DOUBLE 型別,允許固定的小數點,在括號中規定最大位數,
其中size表示可供存盤的值的總位數(不包括小數點),默認值為18;d表示小數點后的位數,默認值為0;
引數之間的關系是0≤d≤size,例如:decimal(15,5)表示共有15位數,其中整數10位,小數5位,

若一個數是上舍入數,其絕對值不會減少,如:對3.14159265358979 分別進行2 位和12位舍入,結果為3.15 和3.141592653590,
在精度上還是有很大的差別的,所以在創建資料庫時一定要對欄位的資料型別進行精準的分析,確保在插入資料值的最大精度上不要出現差錯這樣才不會使資料在運算的程序中出現大的偏差,
例如在月底或者年底匯總報表時查詢出的資料是小數,在運算完以后的資料也是小數,可是在增加到匯總表里的時候變成整數了,
這種情況往往就是資料庫中表在建立的時候沒有有效的設定浮點型資料的小數點后面精度的問題使其資料發生了上舍入現象,
說明:
舍入是一種修約規則,在日常的生活中,我們為了精簡格式,記憶方便,常常用四舍五入的方法來去掉零頭或湊個整數來解決此問題,
四舍五入是一種非常靈活的方法,因此不管是在日常生活中還是在數學計算中四舍五入方法應用的都比較廣泛,
除了四舍五入的舍入方法外還有其他不同的舍入規則、在數學中也有其獨特的定義,
創建的表:

實體1:
這邊我創建了個表用的real,float,decimal,我創建的欄位型別是DECIMAL(3,1),長度是3,小數為1
查詢出來的資料,遵循四舍五入,這里我插入了88.04,所以查詢出來是88.0

實體2:
這邊我對decimal的欄位插入88.05,查詢出來的資料是88.1

實體3:
這邊測驗一下超過長度會怎樣,小數位在表中是保留1位,所以無論你輸入多少位,都是保留1位,也不會報錯,但是超出長度就會報錯
將 varchar 轉換為資料型別 numeric 時出現算術溢位錯誤,

按照上面實體插入了兩條資料,可得知結果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/11314.html
標籤:SQL Server

