SQL中的real、float、decimal、numeric數據類型區別

概述:

浮點數據類型包括real型、float型、decimal型和numeric型。浮點數據類型用於存儲十進制小數。

在SQL Server 中浮點數值的數據採用上舍入(Round up)的方式進行存儲,所謂上舍入也就是,要舍入的小數部分不論其大小,

只要是一個非零的數,就要在該數字的最低有效位上加1,並進行必要的進位。

由於浮點數據為近似值,所以並非數據類型範圍內的所有數據都能精確地表示。

1、區別說明


SQL中的real、float、decimal、numeric數據類型區別


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位。

SQL中的real、float、decimal、numeric數據類型區別

若一個數是上舍入數,其絕對值不會減少。如:對3.14159265358979 分別進行2 位和12位舍入,結果為3.15 和3.141592653590。

在精度上還是有很大的差別的,所以在創建數據庫時一定要對字段的數據類型進行精準的分析,確保在插入數據值的最大精度上不要出現差錯這樣才不會使數據在運算的過程中出現大的偏差。

例如在月底或者年底彙總報表時查詢出的數據是小數,在運算完以後的數據也是小數,可是在增加到彙總表裡的時候變成整數了,

這種情況往往就是數據庫中表在建立的時候沒有有效的設置浮點型數據的小數點後面精度的問題使其數據發生了上舍入現象。

說明:

舍入是一種修約規則。在日常的生活中,我們為了精簡格式,記憶方便,常常用四捨五入的方法來去掉零頭或湊個整數來解決此問題。

四捨五入是一種非常靈活的方法。因此不管是在日常生活中還是在數學計算中四捨五入方法應用的都比較廣泛。

除了四捨五入的舍入方法外還有其他不同的舍入規則、在數學中也有其獨特的定義。


分享到:


相關文章: