首页 > 代码库 > Mysql 存小数的问题
Mysql 存小数的问题
最近做一个报表,有个字段保存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
Mysql 存小数的问题