MySQL中的float和decimal类型有什么区别

MySQL中的float和decimal类型有什么区别

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列做> 或 < 的比较。

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个字节。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/112360.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ORM简介

    ORM简介ORM 简介 ORM 概念什么是 持久化 什么是持久层什么是 ORMORM 作用 ORM 的优劣处优点提高开发效率解耦合缺点减低程序性能 ORM 概念什么是 持久化 即把数据 如内存中的对象 保存的磁盘的某一文件中 什么是持久层持久层 PersistenceL 即实现数据持久化应用领域的一个逻辑层面 将数据使用者和数据实体相关联 什么是 ORMORM 即 ObjectRelati 它是对象关系模型的简称 它的作用是在关系型数据库和对象之间作一个映射 使程序能够通过操纵描述对象方

    2025年8月10日
    3
  • mysql list table_java resultset转list

    mysql list table_java resultset转list我在Orcle里写了一个Sql语句,用到了LISTAGG,现在要改成mysql数据库,我要怎么改这个Sql语句?SELECTA.GUID,A.COMPANY_GUID,A.GOODS_CODE,A.GOODS_NAME,A.SPECIFICATIONS,A.SMALL_IM…我在Orcle里写了一个Sql语句,用到了LISTAGG,现在要改成mysql数据库,我要怎么改这个Sql语句?SELE…

    2025年9月23日
    7
  • LG手机锁屏删除韩国时间_动态时钟锁屏

    LG手机锁屏删除韩国时间_动态时钟锁屏打开开发者模式,usb调试。连接电脑,命令行输入adbshellsettingsputsecureroaming_dualclock1adbshellsettingsputsecureskt_roaming_dualclock1如果显示等待手机连接,把手机连接电脑方式改为充电或图片,传输文件模式下usb调试连接不上国外完整版命令地址,可以删除预装软件…

    2022年9月29日
    2
  • qtcpsocket用法_qtcpsocket发送16进制数据

    qtcpsocket用法_qtcpsocket发送16进制数据在QTcpSocket中的tcp通信,发送数据,接收数据都是QTcpSocket套接字的功能,包括server端,QTcpServer的功能仅仅是作为一个服务器的存在;客户端:classClient:publicQWidget{Q_OBJECTpublic:explicitClient(QWidget*parent=0);~Cl…

    2025年10月17日
    2
  • 明天准备离职了,面对照顾自己的领导,要这样说[通俗易懂]

    明天准备离职了,面对照顾自己的领导,要这样说

    2022年2月13日
    57
  • FCoin“出事”后,团队关键人物回复了![通俗易懂]

    记者:李小平2月12日晚,FCoin交易所的一则“关于系统维护最新进度及开放提现申请”公告在社区引发巨大争议。公告称:一、经核查,系统未曾遭受过外部黑客入侵。二、由于团队关键人员失联,以…

    2022年4月6日
    68

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号