mysql中decimal,numeric,double,float的区别

原创 2017年11月10日 18:35:46

概述:

简单来说decimal,numeric属于标准数据类型,指定精度和刻度;decimal的存储大小不确定,numeric的存储大小默认8个字节。
double,float属于非标准数据类型,在DB中保存的是近似值,而Decimal则以字符串的形式保存数值。

float,double类型是可以存浮点数(即小数类型),但是float有个坏处,当你给定的数据是整数的时候,那么它就以整数给你处理。这样我们在存取货币值的时候自然遇到问题,我的default值为:0.00而实际存储是0,同样我存取货币为12.00,实际存储是12。

数据定义
float(M,S) M为全长,S为小数点后长度。对于不精准的例子,网络上很多,Copy如下:
mysql> create table t1(c1 float(10,2), c3decimal(10,2)); 
Query OK, 0 rows affected (0.02 sec)
mysql> insert into t1 values(9876543.21, 9876543.12);                   
Query OK, 1 row affected (0.00 sec)
mysql> select * from t1;                        
+----------------+-----------------+
| c1                | c3                   |
+----------------+-----------------+
| 9876543.00 | 9876543.12 | 
+----------------+------------------+
2 rows in set (0.00 sec)

再举例: DECIMAL(5,2)

mysql> create table t1(id1 float(5,2) default null,id2 double(5,2) default null,
id3 decimal(5,2) default null );

mysql> insert into t1 values(1.2345,1.2345,1.2345);
Query OK, 1 row affected, 1 warning (0.04 sec)

mysql> show warnings;
+-------+------+------------------------------------------+
| Level | Code | Message |
+-------+------+------------------------------------------+
| Note | 1265 | Data truncated for column 'id3' at row 1 |
+-------+------+------------------------------------------+
1 row in set (0.00 sec)

 
1.2345 --- 小数点后最多2位,所以保存可以,自动四舍五入数据截断,但会报waning
12.34 --- OK
1234.5 --- 因为小数部分未满2位,要补0.所以保存应该1234.50。所以整个位数超出了5,保存报错。
1.2 --- 小数未满部分补0。按照1.20保存。
 
默认状态比较
浮点数如果不写经度和标度,会按照实际精度值保存,如果有精度和标度,则会自动将四舍五入后的结果插入,系统不会报错;定点数如果不写精度和标度,则按照默认值decimal(10,0) 来操作,如果数据超过了精度和标度值,系统会报错。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

sql Server中float、real、decimal(numeric)数据类型的区别

decimal 数据类型最多可存储 38 个数字,所有数字都能够放到小数点的右边。decimal 数据类型存储了一个准确(精确)的数字表达法;不存储值的近似值。 定义 decimal 的列、变量...

decimal(numeric) 、float 、real 的区别

decimal(numeric )           同义,用于精确存储数值 float 和 real                     不能精确存储数值 decimal 数据类型...

SqlServer中decimal(numeric )、float 和 real 数据类型的区别

decimal 数据类型最多可存储 38 个数字,所有数字都能够放到小数点的右边。decimal 数据类型存储了一个准确(精确)的数字表达法;不存储值的近似值。定义 decimal 的列、变量和参数的...

SqlServer中decimal(numeric )、float 和 real 数据类型的区别[转]

decimal(numeric )             同义,用于精确存储数值 float 和 real                      不能精确存储数值 decimal 数...
  • jamex
  • jamex
  • 2012年01月30日 15:31
  • 562

Mysql中NUMERIC和DECIMAL类型区别比较(已测5.6)

 原文地址:http://www.111cn.net/database/mysql/55524.htm numeric与decimal表示的数据类型是有的区别的,主要在精确度上,更详细的确要看...
  • yiyan1
  • yiyan1
  • 2015年05月07日 10:32
  • 3605

Sql的decimal、float、double类型的区别

三者的区别介绍   float:浮点型,含字节数为4,32bit,数值范围为-3.4E38~3.4E38(7个有效位) double:双精度实型,含字节数为8,64bit数值范围-1.7E308...

Sql的decimal、float、double类型的区别

三者的区别介绍   float:浮点型,含字节数为4,32bit,数值范围为-3.4E38~3.4E38(7个有效位) double:双精度实型,含字节数为8,64bit数值范围-1...

C#中decimal, double, float的区别

一直很奇怪C#的预定义数据类型中为什么加了一个decimal,有float和double不就够了吗?今天来挖一挖。 浮点型 Name CTS Type Descriptio...
  • stuqbx
  • stuqbx
  • 2011年11月24日 13:42
  • 443

c#中decimal ,double,float的区别

转贴: http://hi.baidu.com/wang%5F6032/blog/item/89714846f8c46e2bcefca351.html 一直很奇怪C#的预定义数据类型中为什么加了一个d...
  • otong
  • otong
  • 2011年01月05日 15:17
  • 906

decimal,float和double的区别

一直很奇怪C#的预定义数据类型中为什么加了一个decimal,有float和double不就够了吗?今天来挖一挖。 浮点型   Name CTS Type ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mysql中decimal,numeric,double,float的区别
举报原因:
原因补充:

(最多只允许输入30个字)