mysql 数据类型 Float、Double、Decimal和Numeric 的区别

mysql 数据类型 Float、Double、Decimal和Numeric 的区别

作者:myadmin |  时间:2016-06-28 |  浏览:6212 |  0 条评论

mysql 数据类型 Float、Double、Decimal和Numeric  的区别

前几天解决了一个这样的问题:数据是从一个地方爬取过来的,爬取前显示的数据是 901.63  ;然后,爬取数据脚本最后计算的总和也是901.63 一切都没有问题;

但是,我们通过自己的数据库mysql计算出来的值就是601.62。查看了数据条数和对应的值都是对的,把数据导出到Excel后,数据求和也是 901.63,这不是怪了。

最后发现是 mysql数据库字段设置了Float搞的鬼。

其实,这是个老生常谈的问题了,这里做下备注,以便以后查阅

MySQL中存在Float,Double等非标准数据类型,也有Decimal、Numeric这种标准数据类型。
其区别在于,Float,Double等非标准类型,在DB中保存的是近似值,而Decimal则以字符串的形式保存数值。


Float数值类型用于表示单精度浮点数值,而Double数值类型用于表示双精度浮点数值,Float和Double都是浮点型,而Decimal是定点型;
MySQL 浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度,M和D又称为精度和标度,
如float(7,4)的 可显示为-999.9999,MySQL保存值时进行四舍五入,如果插入999.00009,则结果为999.0001。
Float和Double在不指 定精度时,默认会按照实际的精度来显示,而Decimal在不指定精度时,默认整数为10,小数为0

同时,对数据求SUM()时会出现不同的结果,Float和Double求SUM都会出现很多小数点,而Decimal求SUM得到的是精准数值:

decimal 和 numeric 是同义,都是用于精确存储数值 。

综上所述:

Mysql 存储小数的时候,大多数和金额有关系。Float和Double存在精度的问题,所以首选还是要用 Decimal和Numeric,就我个人而言  Numeric 用的比较多。

网上相关的例子也比较多贴出来,也可以看一下

http://www.th7.cn/db/mysql/201411/82120.shtml

http://blog.sina.com.cn/s/blog_7e89c3f50101eh7t.html

http://www.cnblogs.com/gulibao/p/5416245.html

http://www.cnblogs.com/qiantuwuliang/archive/2010/11/03/1867802.html

以上文章都是说的一个事,看看就好了

mysql 数据类型 Float、Double、Decimal和Numeric  的区别

标签:

相关推荐
更多

发表评论