MySQL 浮點數 的精度

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 指定精度值。

MySQL 系列:

1. MySQL 常用 SQL 命令(1. DDL語句)

2. MySQL 常用 SQL 命令(2. DML語句)

3. MySQL 常用函數

4. MySQL 浮點數精度

更多文章

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章