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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。