在使用的時候發現一個問題,由於編程的習慣,當數據庫中需要存儲小數的時候,就想當然的使用了float類型,可結果太讓人意外了。
數據庫中存儲了0.5沒問題,當使用0.6的時候,得到的確是0.59999999999999998,使用1.6得到的是 1.6000000000000001,0.3得到的是0.29999999999999999,很奇怪啊!
在查找之后才明白原因,在SQL Server的幫助中這樣描述:
小數數據
Decimal 數據包含存儲在最小有效數上的數據。在 SQL Server中,小數數據使用 decimal 或 numeric 數據類型存儲。存儲 decimal 或 numeric 數值所需的字節數取決於該數據的數字總數和小數點右邊的小數位數。例如,存儲數值 19283.29383 比存儲 1.1 需要更多的字節。
在 SQL Server中,numeric 數據類型等價於 decimal 數據類型。
近似數字數據
近似數字(浮點)數據包括按二進制計數系統所能提供的最大精度保留的數據。在 SQL Server 中,近似數字數據以 float 和 real 數據類型存儲。例如,分數 1/3 表示成小數形式為 0.333333(循環小數),該數字不能以近似小數數據精確表示。因此,從 SQL Server 獲取的值可能並不准確代表存儲在列中的原始數據。又如,以 .3, .6, .7 結尾的浮點數均為數字近似值。
下圖是各數據類型表示同一個小數的測試結果: