码迷,mamicode.com
首页 > 数据库 > 详细

Mysql 存小数的问题

时间:2014-11-24 15:05:16      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:des   ar   sp   数据   on   问题   bs   ad   ef   

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

标签:des   ar   sp   数据   on   问题   bs   ad   ef   

原文地址:http://www.cnblogs.com/geeek/p/4118597.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!