結論:
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是不錯的選擇,但是需要考慮到數據的范圍問題,以防越界產生的錯誤;