概述: 浮點數據類型包括real型、float型、decimal型和numeric型。浮點數據類型用於存儲十進位小數。 在SQL Server 中浮點數值的數據採用上舍入(Round up)的方式進行存儲,所謂上舍入也就是,要舍入的小數部分不論其大小, 只要是一個非零的數,就要在該數字的最低有效位上 ...
概述:
浮點數據類型包括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 時出現算術溢出錯誤。
按照上面實例插入了兩條數據,可得知結果: