免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 18534 | 回复: 8
打印 上一主题 下一主题

MySQL的float和decimal的区别疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-11-27 11:11 |只看该作者 |倒序浏览
mysql> desc t1;
+-------+---------------+------+-----+---------+-------+
| Field | Type          | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| c1    | float(10,2)   | YES  |     | NULL    |       |
| c2    | decimal(10,2) | YES  |     | NULL    |       |
| c3    | float         | YES  |     | NULL    |       |
+-------+---------------+------+-----+---------+-------+
3 rows in set (0.16 sec)

mysql>   insert into t1 values(1234567.23, 1234567.23,1234567.23);
Query OK, 1 row affected (0.12 sec)

mysql> select * from t1;
+------------+------------+--------------+
| c1         | c2         | c3           |
+------------+------------+--------------+
| 1234567.25 | 1234567.23 | 1.23457e+006 |
+------------+------------+--------------+
1 row in set (0.00 sec)

mysql>  insert into t1 values(9876543.21, 9876543.12,9876543.21);
Query OK, 1 row affected (0.11 sec)

mysql> select * from t1;
+------------+------------+--------------+
| c1         | c2         | c3           |
+------------+------------+--------------+
| 1234567.25 | 1234567.23 | 1.23457e+006 |
| 9876543.00 | 9876543.12 | 9.87654e+006 |
+------------+------------+--------------+
2 rows in set (0.00 sec)

mysql> select version();
+------------------+
| version()        |
+------------------+
| 5.1.32-community |
+------------------+
1 row in set (0.01 sec)

MySQL的float、double和decimal的具体区别,如下,为什么 insert into t1 values(9876543.21, 9876543.12,9876543.21);的时候,float(10,2)的字段值会变成9876543.00 呢?

论坛徽章:
0
2 [报告]
发表于 2013-11-27 13:06 |只看该作者
float,double是浮点数,表示是 a*(2^b)。精度会随着值的变大而减小
decimal是定点数

论坛徽章:
8
CU大牛徽章
日期:2013-09-18 15:20:48CU大牛徽章
日期:2013-09-18 15:20:58CU大牛徽章
日期:2013-09-18 15:21:06CU大牛徽章
日期:2013-09-18 15:21:12CU大牛徽章
日期:2013-09-18 15:21:17天秤座
日期:2013-10-30 14:01:03摩羯座
日期:2013-11-29 18:02:31luobin
日期:2016-06-17 17:46:36
3 [报告]
发表于 2013-11-29 11:42 |只看该作者
@bossgoogle

楼上正解,不过这个问题你应该问度娘或者谷哥。

论坛徽章:
0
4 [报告]
发表于 2013-12-02 18:30 |只看该作者
float是不精确类型,数据太长就会越来越不精确,不建议工资等数据使用该类型。建议使用decimal。可以参看《高性能MySQL》

论坛徽章:
1
天秤座
日期:2014-04-27 07:42:20
5 [报告]
发表于 2013-12-05 16:57 |只看该作者
没有必要的情况下不要用float

论坛徽章:
4
双子座
日期:2014-08-28 10:08:002015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:58:112015年亚洲杯之阿联酋
日期:2015-03-13 03:25:15
6 [报告]
发表于 2013-12-11 14:00 |只看该作者
电商网站的金额存储都是用int类型的,存到分即可,数据里的100表示100分,即1元。

论坛徽章:
1
天秤座
日期:2014-04-27 07:42:20
7 [报告]
发表于 2013-12-11 16:49 |只看该作者
嗯,int型的处理速度是最快的,只要不上亿,用int存金额是最好的。一般情况下用decimal最省心。

论坛徽章:
0
8 [报告]
发表于 2013-12-16 18:41 |只看该作者
本帖最后由 gpingyang 于 2014-12-03 23:53 编辑

float是浮点类型, 在mysql代码中实际对应的是C++原生数据类型float
decimal是定点数, 是精确的, 在代码中实际为一个实现了各种算术操作的C++类

论坛徽章:
0
9 [报告]
发表于 2013-12-19 18:02 |只看该作者
weishuo1999 发表于 2013-12-11 14:00
电商网站的金额存储都是用int类型的,存到分即可,数据里的100表示100分,即1元。


这个方法,看起来也是不错的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP