浮點數據類型包括real型、float型、decimal型和numeric型。浮點數據類型用於存儲十進位小數。在SQL Server 中浮點數值的數據採用上捨入(Round up)的方式進行存儲,所謂上捨入也就是,要捨入的小數部分不論其大小,只要是一個非零的數,就要在該數字的最低有效位上加1,並進行必要的進位。由於浮點數據為近似值,所以並非數據類型範圍內的所有數據都能精確地表示。
real型數據的存儲大小為4個字節,可精確到小數點後第7位數字。這種數據類型的數據存儲範圍為從-3.40E+38~-1.18E-38,0和1.18E-38~3.40E+38。 在MSSql中real的同義詞是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個字節存儲它。這樣既增強了數據定義的靈活性,又節省了空間。
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。在精度上還是有很大的差別的,所以在創建資料庫時一定要對欄位的數據類型進行精準的分析,確保在插入數據值的最大精度上不要出現差錯這樣才不會使數據在運算的過程中出現大的偏差。例如在月底或者年底匯總報表時查詢出的數據是小數,在運算完以後的數據也是小數,可是在增加到匯總表裡的時候變成整數了,這種情況往往就是資料庫中表在建立的時候沒有有效的設置浮點型數據的小數點後面精度的問題使其數據發生了上捨入現象。