MySQL中的float和decimal类型

float,double容易产生误差,对精确度要求比较高时,建议使用decimal来存,decimal在mysql内存是以字符串存储的,用于定义货币要求精确度高的数据。在数据迁移中,float(M,D)是非标准定义,最好不要这样使用。M为精度,D为标度。 mysql create table t1(c1 fl
 float,double容易产生误差,对精确度要求比较高时,建议使用decimal来存,decimal在mysql内存是以字符串存储的,用于定义货币要求精确度高的数据。在数据迁移中,float(M,D)是非标准定义,最好不要这样使用。M为精度,D为标度。
 
  mysql> create table t1(c1 float(10,2), c3 decimal(10,2));
  Query OK, 0 rows affected (0.02 sec)
  mysql> insert into t1 values(1234567.23, 1234567.23);
  Query OK, 1 row affected (0.01 sec)
  mysql> select * from t1;
  +------------+------------+
  | c1 | c3 |
  +------------+------------+
  | 1234567.25 | 1234567.23 |
  +------------+------------+
  1 row in set (0.02 sec)
  mysql> insert into t1 values(9876543.21, 9876543.12);
  Query OK, 1 row affected (0.00 sec)
  mysql>
  mysql> select * from t1;
  +------------+------------+
  | c1 | c3 |
  +------------+------------+
  | 1234567.25 | 1234567.23 |
  | 9876543.00 | 9876543.12 |
  +------------+------------+

  2 rows in set (0.00 sec)
  不定义fload, double的精度和标度时,存储按给出的数值存储,这于OS和当前的硬件有关。
  decimal默认为decimal(10,0)
  因为误差问题,在程序中,少用浮点数做=比较,可以做range比较。如果数值比较,最好使用decimal类型。
  精度中,符号不算在内:
 
 mysql> insert into t1 values(-98765430.21, -98765430.12);
  Query OK, 1 row affected (0.01 sec)
  mysql> select * from t1;
  +--------------+--------------+
  | c1 | c3 |
  +--------------+--------------+
  | 1234567.25 | 1234567.23 |
  | 9876543.00 | 9876543.12 |
  | -98765432.00 | -98765430.12 |
  +--------------+--------------+
  3 rows in set (0.00 sec)
 
  float占4个字节,double占8个字节,decimail(M,D)占M+2个字节。
  decimal 类型可以精确地表示非常大或非常精确的小数。大至 1028(正或负)以及有效位数多达 28 位的数字可以作为 decimal类型存储而不失其精确性。该类型对于必须避免舍入错误的应用程序(如记账)很有用。
  float是浮点数,不能指定小数位。
  decimal是精确数,可以指定精度。
  对mysql 5来说 decimal(p,s)中p最大为65,S最大为30
  decimal数据类型最多可存储 38 个数字,它存储了一个准确(精确)的数字表达法,不存储值的近似值。
  当数据值一定要按照指定精确存储时,可以用带有小数的decimal数据类型来存储数字。
  float和real数据类型被称为近似的数据类型。不存储精确值.当要求精确的数字状态时,比如在财务应用程序中,在那些需要舍入的操作中, 或在等值核对的操作中,就不使用这些数据类型。这时就要用integer、decimal、money或smallmone数据类型。
  在 WHERE 子句搜索条件中(特别是 = 和 <> 运算符),应避免使用float或real列。最好限制使用float和real列做> 或 < 的比较。
本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

liunx mysql root账户提示:Your password has expired. To log in you must change it using a client that supports expired passwords,要怎么操作呢? 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动
下面是针对PostgreSQL中的权限问题的完整攻略。
MySQL是一种流行的关系型数据库系统,它提供了多种时间类型和模式,用于存储和处理时间数据。本文将详细介绍MySQL时间类型和模式的详细攻略。
首先在官网下载CentOS7镜像,并在VMware虚拟机中新建一台CentOS7虚拟机,将镜像挂载到虚拟机中并启动。
MySQL中出现lock wait timeout exceeded问题的原因是由于两个或多个事物同时请求相同的资源造成的,并且在某一时刻至少一个事务无法获取资源,超过了MySQL默认的等待时间,从而导致事务失败。这种问题的出现会极大地影响数据库的性能和并发能力。
针对“Linux下安装配置MySQL”的问题,我为您提供以下完整攻略: