mysql中float類型使用總結


對於單精度浮點數Float:  當數據范圍在±131072(65536×2)以內的時候,float數據精度是正確的,但是超出這個范圍的數據就不穩定,沒有發現有相關的參數設置建議:將float改成double或者decimal,兩者的差別是double是浮點計算decimal是定點計算,會得到更精確的數據。

下面使用分析,

首先創建測試表

CREATE TABLE `customer` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `jinqian` float(5,2) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=11111112 DEFAULT CHARSET=utf8;

float(m,d)

m表示的是最大長度,d表示的顯示的小數位數。

例如上面的sql里:float(5,2) 表示:這個浮點數最大長度為5,也就是五位,然后小數部分為2位,至於存儲范圍,取決於你是否定義了無符號。

無符號的話,最小是0.0 最大能存儲到99999.9,如果有符號的話,范圍是:-99999.9至99999.9。

默認大小為24位數字,精度大約7位數字(經測試為6位),當設置M大小大於24時,自動轉換為DOUBLE類型;同時設置M和D時不進行自動轉換。

小數位超過設定值,按四舍五入保存

INSERT INTO customer (id,name,age,jinqian) VALUES (111111111,'uu',15,90.012);
INSERT INTO customer (id,name,age,jinqian) VALUES (1111111111,'uu',15,90.018);

上面兩個分別被保存為

小數位如果都是0,則不保存小數位

INSERT INTO customer (id,name,age,jinqian) VALUES (1,'uu',15,90.0);
INSERT INTO customer (id,name,age,jinqian) VALUES (11,'uu',15,90.00);

上面兩個分別被保存為

總結

從上面的分析,我們可以得出以下結論:

1、浮點數存在誤差問題;
2、對貨幣等對精度敏感的數據,應該用定點數表示或存儲;
3、編程中,如果用到浮點數,要特別注意誤差問題,並盡量避免做浮點數比較;
4、要注意浮點數中一些特殊值的處理

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM