MySQL数据类型--浮点数类型和定点数类型

原创 2016年03月16日 10:21:47

  • MySQL中使用浮点数类型和定点数类型来表示小数。

浮点数类型包括单精度浮点数(float型)和双精度浮点数(double型)。定点数类型就是decimal型。

OK,现在我们来看看这几种数据类型的取值范围和存数的字节数。


关于上表的解释:

1,Decimal型的取值范围和double相同。但是decimal的有效取值范围由M和D决定,而且Decimal型的字节数是M+2。也就是说,定点数的存储空间是根据其精度决定的。

2,MySQL中可以指定浮点数和定点数的精度。其基本形式如下:数据类型(M,D)。

其中,“数据类型”参数是浮点数或定点数的数据类型名称,M参数称为精度,是数据的总长度,小数点不占位置。D参数成为标度,是指小数点后面的长度是D。

举个例子:float(6,2)的含义数据是float型,数据长度是6,小数点后保留2位。所以,1234.56是符合要求的。

3,注意:上述指定的小数精度的方法虽然都适用于浮点数和定点数,但不是浮点数的标准用法。建议在定义浮点数时,如果不是实际情况需要,最好不要使用,如果使用了,可能会影响数据库的迁移。

4,相反,对于定点数而言,decimal(M,D)是定点数的标准格式,一般情况下可以选择这种数据类型。

5,如果插入值的精度高于实际定义的精度,系统会自动进行四舍五入处理,使值的精度达到要求。


  • OK,现在我们来举几个实际的例子:

1,指定精度的情况。

建表语句如下:

CREATE TABLE `linkinframe`.`test` (
  `id` INT NOT NULL,
  `a` FLOAT(6,2) NULL,
  `b` DOUBLE(6,2) NULL,
  `c` DECIMAL(6,2) NULL,
  PRIMARY KEY (`id`));
现在我们往表中插入几条数据:
INSERT INTO `linkinframe`.`test` (`id`, `a`, `b`,`c`) VALUES ('1', '1.111', '1.117','1.117');
 INSERT INTO `linkinframe`.`test` (`id`, `a`, `b`,`c`) VALUES ('2', '1234567', '1234.892','1234.892');

数据库现在显示数据如下:



 2,未指定精度的情况。

浮点数和定点数有其默认的精度,float和double默认会保存实际精度,但这与操作系统和硬件的精度有关。decimal型的默认整数位为10,小数位为0,即默认为整数。


建表语句如下:

CREATE TABLE `linkinframe`.`test` (
  `id` INT NOT NULL,
  `a` FLOAT NULL,
  `b` DOUBLE NULL,
  `c` DECIMAL NULL,
  PRIMARY KEY (`id`));
现在我们插入一条数据:

INSERT INTO `linkinframe`.`test` (`id`, `a`, `b`,`c`) VALUES ('1', '3.1415', '3.14159','3.14159');
 
OK,现在数据库显示如下:




  • 总结:

在MySQL中,定点数以字符串形式存储,因此,其精度比浮点数要高,而且浮点数会出现误差,这是浮点数一直存在的缺陷。如果要对数据的精度要求比较高,还是选择定点数decimal比较安全。

版权声明:本文为博主原创文章,欢迎大家转载。如有错误请多多指教。 https://blog.csdn.net/u011794238/article/details/50902405

mysql中的浮点类型

MySQL 支持的三个浮点类型是 FLOAT、DOUBLE 和 DECIMAL 类型。FLOAT 数值类型用于表示单精度浮点数值,而 DOUBLE 数值类型用于表示双精度浮点数值。与整数一样,这些类型...
  • BigBird2012
  • BigBird2012
  • 2011-07-07 19:48:19
  • 32133

mysql 中的浮点和定点类型

前面一段实验是引用别人的,后面作了一点补充 MySQL浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度,M和D又称为精度和标度,如 float(7,4)...
  • z1988316
  • z1988316
  • 2011-11-21 17:04:10
  • 3888

mysql 字符串字段转浮点型字段

mysql 转换类型用两个函数:CONVERT(字段/需要转换的值, 类型) CAST(字段/需要转换的值 AS 类型) 因为之前设计,将某表金额字段类型设置为varchar 现在需要对此...
  • q664243624
  • q664243624
  • 2017-11-16 13:42:13
  • 1072

MySQL数据库浮点数据类型的坑

今天在盘点的时候折腾了一次,在创建表的时候么有关注到浮点数的精度问题,导致排查问题浪费了很长时间. 场景:汇总报表,将查出的数据插入另外一张表中,查出来的数据是小数,转成另一张表对应的javab...
  • u010504064
  • u010504064
  • 2016-08-25 18:04:42
  • 2314

Mysql中设置小数点用什么数据类型

decimal Decimal(n,m)表示数值中共有n位数,其中整数n-m位,小数m位。例:decimal(10,6),数值中共有10位数,其中整数占4位,小数占6位。 例:...
  • asdfsadfasdfsa
  • asdfsadfasdfsa
  • 2017-10-02 14:41:51
  • 1383

Mysql中设置小数点用什么数据类型 decimal

Mysql中设置小数点用什么数据类型? decimal Decimal(n,m)表示数值中共有n位数,其中整数n-m位,小数m位。例:decimal(10,6),数值中共有10位数...
  • yanglingtuan
  • yanglingtuan
  • 2016-03-03 17:59:28
  • 19498

mysql小数类型字段,float,double

mysql float double类型 1.float类型float列类型默认长度查不到结果,必须指定精度,比如 num  float,  insert into  table (num) valu...
  • lumengabc
  • lumengabc
  • 2013-12-09 10:50:05
  • 7257

mysql 字段类型保存小数和整数

mysql float double类型   1.float类型 float列类型默认长度查不到结果,必须指定精度, 比如 num  float,  insert into  ...
  • qq_38287952
  • qq_38287952
  • 2017-09-03 15:33:02
  • 910

MySQL DECIMAL数据类型

同事问MySQL数据类型DECIMAL(N,M)中N和M分别表示什么含义,M不用说,显然是小数点后的小数位数,但这个N究竟是小数点之前的最大位数,还是加上小数部分后的最大位数?这个还真记不清了。于是乎...
  • zyz511919766
  • zyz511919766
  • 2015-10-22 16:43:57
  • 37337

MySql数据类型分析(数值(小数型)类型) Part2

一.小数型 包括两种类型
  • abc456456456456
  • abc456456456456
  • 2014-04-09 10:57:06
  • 2924
收藏助手
不良信息举报
您举报文章:MySQL数据类型--浮点数类型和定点数类型
举报原因:
原因补充:

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