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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • c语言代码缩进是什么意思_word文字无法换行

    c语言代码缩进是什么意思_word文字无法换行一、缩进的空格数为4个。二、“{”和“}”各自独占一行。不规范例子:for(i=0;i&lt;student_num;i++);{if((score[i]&gt;=0)&amp;&amp;(score[i])&lt;=100)total_score+=score[i];elseprin…

    2022年10月18日
    2
  • Mac环境变量的配置

    Mac环境变量的配置Mac系统下进行PATH配置1.打开配置文件vi ~/.bash_profile2.编辑配置文件export路径名=/Users/…/PATH=$路径名:$PATH 3.保存配置文件终端:键入esc键终端:输入:wq,退出4.立即生效终端:键入source ~/.bash_profile测试配置是否成功…

    2022年6月16日
    73
  • 中国石化java待遇_中国石化JAVA软件工程师面试:首先,上午进行面试人员签到 – 职朋职业圈…「建议收藏」

    中国石化java待遇_中国石化JAVA软件工程师面试:首先,上午进行面试人员签到 – 职朋职业圈…「建议收藏」为了帮助职业圈网友能够及时了解中国石化的面试流程以及面试过程所涉及的面试问题,职业圈小编把刚获得的中国石化面试经验马上编辑好,快速提供给大家,以便能够尽快帮助到有需要的人。这次面试总共花了0.5天。面试形式包括群面。面试过程首先,上午进行面试人员签到,大约100人左右。一共要2个人。下午1点半开始统一面试。人员较多,所以每个人只有3分钟时间,一共最少8位面试官。过程中,他们很少提问题,如果你的技…

    2022年10月15日
    6
  • localdatetime 转 date_datetime.date.today()

    localdatetime 转 date_datetime.date.today()Date与Java8的时间之间的相互转换必须通过一个中间类Instant。importjava.time.*;importjava.util.Date;/***日期转换工具类**@authorLenovo*/publicclassDateUtil{publicstaticLocalDateTimedate2LocalDateTime(Datedate){//returndate.toInstant().atZone(Zo

    2022年9月1日
    4
  • Kafka连接服务器出现:Connection to node 1 (localhost/127.0.0.1:9092) could not be established.「建议收藏」

    文章目录1.安全组是否开放&防火墙是否拦截请求2.登陆服务器查看Kafkabroker是否可用3.查看Kafka运行日志4.在网上找资料5.解决问题今天遇到个很奇怪的问题,是关于外网连接Kafka的。在服务器本地可以使用命令行参数连接并且进行发布订阅操作,但是在外网环境就不可以了,SpringBoot连接报错:Connectiontonode1(localhost/127….

    2022年4月11日
    89
  • request对象和response对象

    request对象和response对象一、请求响应流程图 服务器处理请求的流程: (1)服务器每次收到请求时,都会为这个请求开辟一个新的线程。 (2)服务器会把客户端的请求数据封装到request对象中,request就是请求数据的载体! (3)服务器还会创建response对象,这个对象与客户端连接在一起,它可以用来向客户端发送响应。   由流程图可以看出,在

    2022年6月12日
    46

发表回复

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

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