MySQL 浮點數 的精度
在 MySQL 中,float 表示單精度浮點數, double 表示雙精度浮點數,decimal 表示定點數。定義 這些類型的數據時,同時需要指定其長度和精度 ,即用名稱(M,D)來表示,M表示該值的總共長度,D表示小數點後面的長度,M和D又稱爲精度和標度。
如果 float 和 double 不指定精度,則按照實際的精度來顯示, decimal 不指定時,默認爲(10,2)。
這裏,還有一個問題,對於 float 和 double,如果不指定精度,則不會存儲小數點末尾的0,只有指定了具體的精度值,纔會存儲小數點末尾的0。
eg.
mysql> create table test2(f1 float, f2 float(5,2), f3 double, f4 double(10,2));
Query OK, 0 rows affected (0.10 sec)
mysql> insert into test2 values(12.30, 12.30, 12.30, 12.30);
Query OK, 1 row affected (0.10 sec)
mysql> select * from test2;
+------+-------+------+-------+
| f1 | f2 | f3 | f4 |
+------+-------+------+-------+
| 12.3 | 12.30 | 12.3 | 12.30 |
+------+-------+------+-------+
1 row in set (0.00 sec)
mysql> insert into test2 values(12.300, 12.300, 12.300, 12.300);
Query OK, 1 row affected (0.05 sec)
mysql> select * from test2;
+------+-------+------+-------+
| f1 | f2 | f3 | f4 |
+------+-------+------+-------+
| 12.3 | 12.30 | 12.3 | 12.30 |
| 12.3 | 12.30 | 12.3 | 12.30 |
+------+-------+------+-------+
2 rows in set (0.00 sec)
mysql> insert into test2 values(12.305, 12.305, 12.305, 12.305);
Query OK, 1 row affected (0.07 sec)
mysql> select * from test2;
+--------+-------+--------+-------+
| f1 | f2 | f3 | f4 |
+--------+-------+--------+-------+
| 12.3 | 12.30 | 12.3 | 12.30 |
| 12.3 | 12.30 | 12.3 | 12.30 |
| 12.305 | 12.30 | 12.305 | 12.30 |
+--------+-------+--------+-------+
3 rows in set (0.00 sec)
所以,要想保留小數點末尾的0,則必須對 float 或 double 指定精度值。