MySQL中的float和decimal类型

飞鸟
飞鸟
管理员
2212
文章
0
粉丝
数据库学习评论851阅读模式

MySQL中的float和decimal类型

float,double容易产生误差,对精确度要求比较高时,建议使用decimal来存,decimal在mysql内存是以字符串存储的,用于定义货币要求精确度高的数据。在数据迁移中,float(M,D)是非标准定义,最好不要这样使用。M为精度,D为标度。
01 mysql> create table t1(c1 float(10,2), c3 decimal(10,2));
02 Query OK, 0 rows affected (0.02 sec)
03 mysql> insert into t1 values(1234567.23, 1234567.23);
04 Query OK, 1 row affected (0.01 sec)
05 mysql> select * from t1;
06 +------------+------------+
07 | c1 | c3 |
08 +------------+------------+
09 | 1234567.25 | 1234567.23 |
10 +------------+------------+
11 1 row in set (0.02 sec)
12 mysql> insert into t1 values(9876543.21, 9876543.12);
13 Query OK, 1 row affected (0.00 sec)
14 mysql>
15 mysql> select * from t1;
16 +------------+------------+
17 | c1 | c3 |
18 +------------+------------+
19 | 1234567.25 | 1234567.23 |
20 | 9876543.00 | 9876543.12 |
21 +------------+------------+
22
23 2 rows in set (0.00 sec)
  不定义fload, double的精度和标度时,存储按给出的数值存储,这于OS和当前的硬件有关。
  decimal默认为decimal(10,0)
  因为误差问题,在程序中,少用浮点数做=比较,可以做range比较。如果数值比较,最好使用decimal类型。
  精度中,符号不算在内:
01 mysql> insert into t1 values(-98765430.21, -98765430.12);
02  Query OK, 1 row affected (0.01 sec)
03  mysql> select * from t1;
04  +--------------+--------------+
05  | c1 | c3 |
06  +--------------+--------------+
07  | 1234567.25 | 1234567.23 |
08  | 9876543.00 | 9876543.12 |
09  | -98765432.00 | -98765430.12 |
10  +--------------+--------------+
11  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列做> 或 < 的比较。
文章源自飞鸟学习网-https://www.pk88.net/2022-0408-3.html

全站资源源于网络整合,仅供学习研究,不可商用,不提供技术指导,如有侵权请告知删除,可以投稿,广告合作联系V: pk88net

继续阅读
weinxin
我的微信
微信号已复制
我的微信
微信扫一扫
 
  • 本文由 飞鸟 发表于7 4 月, 2022 11:53:27
  • 转载请务必保留本文链接:https://www.pk88.net/2022-0408-3.html
    免责声明
    非常感谢您的访问。在您使用本网站之前,请您仔细阅读本声明的所有条款。
    1、本网站属于个人网站,本分开放互享的原则,本网站的内容均为站长提供、网友推荐、互联网整理而来,仅用于广大网友学习研究使用,如有侵犯您的版权,请及时联系我们,本站将及时纠正。
    2、本站内容不保证其完整性、正确性,但是我们会尽最大努力去确保提供信息的完整性及正确性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。
    3、对由于使用本站所产生的任何直接、间接或偶然性的损失或破坏,无论该损失或破坏是否源于疏忽、违约、诽谤、侵权甚至电脑病毒等原因造成的,本网站概不负责,亦不负任何法律责任。
    4、本网站所有内容(网络,素材、图片),其版权均归原作者所有,在转载有关文章时务必尊重该文章的著作权,保留其来源,并自负版权等法律责任。
    5、本声明未涉及的问题参见国家有关法律法规,当本声明与国家法律法规冲突时,以国家法律法规为准。
    6、本站文章内容,如果来源于互联网,我们会标明其来源,如果属于本站原创整理互联网资料,请您转载或者使用该文章时尊重本站及其互联网作者的著作权,注明其来源。
    7、互联网的本质是自由与分享,我们真诚的希望,本站的每一份正能量能带给正在访问本网站的您提供有效的帮助,并且能在互联网自由传播。希望大家多多支持本站。
  • mysql类型

发表评论