MySQL中的float和decimal類型
float,double容易產(chǎn)生誤差,對(duì)精確度要求比較高時(shí),建議使用decimal來(lái)存,decimal在mysql內(nèi)存是以字符串存儲(chǔ)的,用于定義貨幣要求精確度高的數(shù)據(jù)。在數(shù)據(jù)遷移中,float(M,D)是非標(biāo)準(zhǔn)定義,最好不要這樣使用。M為精度,D為標(biāo)度。
mysql> create table t1(c1 float(10,2), c3 decimal(10,2));
Query OK, 0 rows affected (0.02 sec)
mysql> insert into t1 values(1234567.23, 1234567.23);
Query OK, 1 row affected (0.01 sec)
mysql> select * from t1;
+------------+------------+
| c1 | c3 |
+------------+------------+
| 1234567.25 | 1234567.23 |
+------------+------------+
1 row in set (0.02 sec)
mysql> insert into t1 values(9876543.21, 9876543.12);
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> select * from t1;
+------------+------------+
| c1 | c3 |
+------------+------------+
| 1234567.25 | 1234567.23 |
| 9876543.00 | 9876543.12 |
+------------+------------+
2 rows in set (0.00 sec)
不定義fload, double的精度和標(biāo)度時(shí),存儲(chǔ)按給出的數(shù)值存儲(chǔ),這于OS和當(dāng)前的硬件有關(guān)。
decimal默認(rèn)為decimal(10,0)
因?yàn)檎`差問(wèn)題,在程序中,少用浮點(diǎn)數(shù)做=比較,可以做range比較。如果數(shù)值比較,最好使用decimal類型。
精度中,符號(hào)不算在內(nèi):
mysql> insert into t1 values(-98765430.21, -98765430.12);
Query OK, 1 row affected (0.01 sec)
mysql> select * from t1;
+--------------+--------------+
| c1 | c3 |
+--------------+--------------+
| 1234567.25 | 1234567.23 |
| 9876543.00 | 9876543.12 |
| -98765432.00 | -98765430.12 |
+--------------+--------------+
3 rows in set (0.00 sec)
float占4個(gè)字節(jié),double占8個(gè)字節(jié),decimail(M,D)占M+2個(gè)字節(jié)。
decimal 類型可以精確地表示非常大或非常精確的小數(shù)。大至 1028(正或負(fù))以及有效位數(shù)多達(dá) 28 位的數(shù)字可以作為 decimal類型存儲(chǔ)而不失其精確性。該類型對(duì)于必須避免舍入錯(cuò)誤的應(yīng)用程序(如記賬)很有用。
float是浮點(diǎn)數(shù),不能指定小數(shù)位。
decimal是精確數(shù),可以指定精度。
對(duì)mysql 5來(lái)說(shuō) decimal(p,s)中p最大為65,S最大為30
decimal數(shù)據(jù)類型最多可存儲(chǔ) 38 個(gè)數(shù)字,它存儲(chǔ)了一個(gè)準(zhǔn)確(精確)的數(shù)字表達(dá)法,不存儲(chǔ)值的近似值。
當(dāng)數(shù)據(jù)值一定要按照指定精確存儲(chǔ)時(shí),可以用帶有小數(shù)的decimal數(shù)據(jù)類型來(lái)存儲(chǔ)數(shù)字。
float和real數(shù)據(jù)類型被稱為近似的數(shù)據(jù)類型。不存儲(chǔ)精確值.當(dāng)要求精確的數(shù)字狀態(tài)時(shí),比如在財(cái)務(wù)應(yīng)用程序中,在那些需要舍入的操作中,或在等值核對(duì)的操作中,就不使用這些數(shù)據(jù)類型。這時(shí)就要用integer、decimal、money或smallmone數(shù)據(jù)類型。
在 WHERE 子句搜索條件中(特別是 = 和 <> 運(yùn)算符),應(yīng)避免使用float或real列。最好限制使用float和real列做> 或 < 的比較。
bitsCN.com聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com