程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL中的float和decimal類型

MySQL中的float和decimal類型

編輯:MySQL綜合教程

MySQL中的float和decimal類型   float,double容易產生誤差,對精確度要求比較高時,建議使用decimal來存,decimal在mysql內存是以字符串存儲的,用於定義貨幣要求精確度高的數據。在數據遷移中,float(M,D)是非標准定義,最好不要這樣使用。M為精度,D為標度。    www.2cto.com     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的精度和標度時,存儲按給出的數值存儲,這於OS和當前的硬件有關。    decimal默認為decimal(10,0)    因為誤差問題,在程序中,少用浮點數做=比較,可以做range比較。如果數值比較,最好使用decimal類型。    精度中,符號不算在內:      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個字節,double占8個字節,decimail(M,D)占M+2個字節。    decimal 類型可以精確地表示非常大或非常精確的小數。大至 1028(正或負)以及有效位數多達 28 位的數字可以作為 decimal類型存儲而不失其精確性。該類型對於必須避免捨入錯誤的應用程序(如記賬)很有用。   www.2cto.com     float是浮點數,不能指定小數位。  decimal是精確數,可以指定精度。  對mysql 5來說 decimal(p,s)中p最大為65,S最大為30  decimal數據類型最多可存儲 38 個數字,它存儲了一個准確(精確)的數字表達法,不存儲值的近似值。    當數據值一定要按照指定精確存儲時,可以用帶有小數的decimal數據類型來存儲數字。  float和real數據類型被稱為近似的數據類型。不存儲精確值.當要求精確的數字狀態時,比如在財務應用程序中,在那些需要捨入的操作中,或在等值核對的操作中,就不使用這些數據類型。這時就要用integer、decimal、money或smallmone數據類型。    在 WHERE 子句搜索條件中(特別是 = 和 <> 運算符),應避免使用float或real列。最好限制使用float和real列做> 或 < 的比較。 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved