結論: 1. float 預設只保存6位(除去小數點),如果超過6位,則四捨五入,所以float存儲的數據是不精確的,只是近似值; 2. decimal,如果輸入的數據超過了定義的最大值,那麼則溢出,資料庫裡面存儲的是定義的最大值,例如,decimal(5,2)輸入123123.45,實際存儲為99 ...
結論: 1. float 預設只保存6位(除去小數點),如果超過6位,則四捨五入,所以float存儲的數據是不精確的,只是近似值; 2. decimal,如果輸入的數據超過了定義的最大值,那麼則溢出,資料庫裡面存儲的是定義的最大值,例如,decimal(5,2)輸入123123.45,實際存儲為999.99; 3. decimal,如果只是小數部分超過定義的長度,那麼則截斷(非四捨五入)指定長度,例如,decimal(10,2)輸入12345678.123456,實際存儲為12345678.12; 4. decimal,整數部分和小數部分是分開存儲的,每9個數字占用4個位元組,在mysql內部使用的二進位存儲,基本沒有長度的限制; 建議: 1. 儘量不用float類型; 2. 存錢之類的數據,使用int(bigint)來存,在計算的時候除以100; 3. 一定要存小數的話,decimal是不錯的選擇,但是需要考慮到數據的範圍問題,以防越界產生的錯誤;