最近做一個報表,有個字段保存money,涉及到小數,沒有多想就將數據庫字段設置成了float,等查詢出來,真正的值后面加了一坨隨機數字,太嘔吐了,查了點資料,將該字段格式改成了decimal(10,1),就ok了。
例如,語句FLOAT (5,2)規定顯示的值不會超過5位數字,小數點后面帶有2位數字。
對於小數點后面的數字個數超過了允許的數目的值,系統會自動將它四舍五入為最接近它的值,然后插入它。
mysql> create table data(price float(5,2));
Query OK, 0 rows affected
mysql> insert into data values (13.6),(876.90),(-5.2),(-123.456);
Query OK, 4 rows affected
Records: 4 Duplicates: 0 Warnings: 0
mysql> select * from data;
+---------+
| price |
+---------+
| 13.6 |
| 876.9 |
| -5.2 |
| -123.46 |
+---------+
4 rows in set
DECIMAL 數據類型用於要求非常高的精確度的計算中,這些類型允許指定數值的精確度和計數方法作為選擇參數。精確度在這里是指為這個值保存的有效數字的總個數,而計 數方法表示小數點后數字的個數。例如,語句DECIMAL (5,2)規定了存儲的值將不會超過5位數字,開且小數點后面有2位數字。
MySQL在內部把DECIMAL數據類型存儲為字符串,更精確地保留它們的值。
mysql> create table data_8(bad decimal(6,3));
Query OK, 0 rows affected
mysql> insert into data_8 values (1);
Query OK, 1 row affected
mysql> select * from data_8;
+-----+
| bad |
+-----+
| 1.000 |
+-----+
1 row in set
忽略DECIMAL數據類型的精確度和計數方法修飾符將會使MySQL把所有標識為這個類型的字段的精確度默認為10,計算方法默認為0
mysql> create table data_9 (test decimal
);
Query OK, 0 rows affected
mysql> desc data_9;
+-------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| test | decimal(10,0) | YES | | NULL | |
+-------+---------------+------+-----+---------+-------+
1 row in set