总结MySQL中float、double、decimal三个浮点类型的区别

mysql视频教程栏目总结MySQL中三个浮点类型的区别

总结MySQL中float、double、decimal三个浮点类型的区别

下表中规划了每个浮点类型的存储大小和范围:

类型 大小 范围(有符号) 范围(无符号) 用途

==float==4 bytes(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)0,(1.175 494 351 E-38,3.402 823 466 E+38)单精度 浮点数值==double==8 bytes(-1.797 693 134 862 315 7 E+308,-2.225073858507 2014E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度 浮点数值decimal对decimal(M,D) ,如果M>D,为M+2否则为D+2依赖于M和D的值依赖于M和D的值小数值

那么MySQL中这三种都是浮点类型 它们彼此的区别又是什么呢 ??

float 浮点类型用于表示==单精度浮点==数值,double浮点类型用于表示==双精度浮点==数值

这里肯定有些小伙伴要问了  什么是单精度 什么是双精度 ? 下面我们就来简单了解一下吧!

我们知道一个bytes(字节) 占8位 对吧!

float单精度 存储浮点类型的话 就是 ==4×8=32位的长度==  , 所以float单精度浮点数在内存中占 4 个字节,并且用 32 位二进制进行描述

那么 double双精度 存储浮点类型就是 ==8×8 =64位的长度==,  所以double双精度浮点数在内存中占 8 个字节,并且用 64 位二进制进行描述  通过计算、那么64位就可以获得更多的尾数!

尾数 : ==就是小数点后的有多少个数位==

所以这里的精度主要取决于==尾数==部分的位数, 所以根据IEEE二进制浮点数算术标准 来计算得出结论:

float单精度小数部分只能精确到后面6位,加上小数点前的一位,即有效数字为7位double双精度小数部分能精确到小数点后的15位,加上小数点前的一位 有效位数为16位。最后就区别出了小数点后边位数的长度,越长越精确!

double 和 float 彼此的区别:

在内存中占有的字节数不同, 单精度内存占4个字节,  双精度内存占8个字节有效数字位数不同(尾数)  单精度小数点后有效位数7位,  双精度小数点后有效位数16位数值取值范围不同  根据IEEE标准来计算!在程序中处理速度不同,一般来说,CPU处理单精度浮点数的速度比处理双精度浮点数快

double 和 float 彼此的优缺点:

float单精度

优点: float单精度在一些处理器上比double双精度更快而且只占用double双精度一半的空间

缺点: 但是当值很大或很小的时候,它将变得不精确。

double双精度

优点: double 跟 float比较, 必然是 double 精度高,尾数可以有 16 位,而  float 尾数精度只有 7 位

缺点: double 双精度是消耗内存的,并且是 float 单精度的两倍! ,double 的运算速度比 float 慢得多, 因为double 尾数比float  的尾数多, 所以计算起来必然是有开销的!

如何选择double 和 float 的使用场景!

首先: 能用单精度时不要用双精度 以省内存,加快运算速度!

float: 当然你需要小数部分并且对精度的要求不高时,选择float单精度浮点型比较好!

double: 因为小数位精度高的缘故,所以双精度用来进行高速数学计算、科学计算、卫星定位计算等处理器上双精度型实际上比单精度的快, 所以: 当你需要保持多次反复迭代的计算精确性时,或在操作值很大的数字时,双精度型是最好的选择。

说这么多其实就是小数点后面的保留位数多少的问题!

==小结double和float:==

BibiGPT-哔哔终结者 BibiGPT-哔哔终结者

B站视频总结器-一键总结 音视频内容

BibiGPT-哔哔终结者 28 查看详情 BibiGPT-哔哔终结者

float 表示的小数点位数少,double能表示的小数点位数多,更加精确! 就这么简单 看情况自己选择吧!

double和float 后面的长度m,d代表的是什么?

double(m,d) 和float(m,d) 这里的m,d代表的是什么呢 ?  很多小伙伴也是不清不楚的!  我还是来继续解释一下吧

其实跟前面整数int(n)一样,这些类型也带有附加参数:一个显示宽度m和一个小数点后面带的个数d

比如: 语句 float(7,3) 规定显示的值不会超过 7 位数字,小数点后面带有 3 位数字 、double也是同理

在MySQL中,在定义表字段的时候,  unsigned和 zerofill 修饰符也可以被 float、double和 decimal数据类型使用, 并且效果与 int数据类型相同  跟上面一样这里就不多说了!

==小结:==

在MySQL 语句中, 实际定义表字段的时候,

float(M,D) unsigned  中的M代表可以使用的数字位数,D则代表小数点后的小数位数, unsigned 代表不允许使用负数!

double(M,D) unsigned 中的M代表可以使用的数字位数,D则代表小数点后的小数位数

==注意:== M>=D!

decimal类型

==1.介绍decimal==

在存储同样范围的值时,通常比decimal使用更少的空间,float使用4个字节存储,double使用8个字节  ,

而 decimal依赖于M和D的值,所以decimal使用更少的空间

在实际的企业级开发中,经常遇到需要存储金额(3888.00元)的字段,这时候就需要用到数据类型decimal。在MySQL数据库中,decimal的使用语法是:decimal(M,D),其中,M 的范围是165,D 的范围是030,而且D不能大于M。

==2.最大值==

数据类型为decimal的字段,可以存储的最大值/范围是多少?例如:decimal(5,2),则该字段可以存储-999.99~999.99,最大值为999.99。也就是说D表示的是小数部分长度,(M-D)表示的是整数部分长度。

==3.存储==  [了解]decimal类型的数据存储形式是,将每9位十进制数存储为4个字节

(官方解释:Values for DECIMAL columns are stored using a binary format that packs nine decimal digits into 4 bytes)。

那有可能设置的位数不是9的倍数,官方还给了如下表格对照:

Leftover Digits Number of Bytes

001–213–425–637–94

==表格什么意思呢,举个例子:==

1、字段decimal(18,9),18-9=9,这样整数部分和小数部分都是9,那两边分别占用4个字节;2、字段decimal(20,6),20-6=14,其中小数部分为6,就对应上表中的3个字节,而整数部分为14,14-9=5,就是4个字节再加上表中的3个字节

所以通常我们在设置小数的时候,都是用的decimal类型!!

小案例1

mysql> drop table temp2;Query OK, 0 rows affected (0.15 sec)mysql> create table temp2(id float(10,2),id2 double(10,2),id3 decimal(10,2));Query OK, 0 rows affected (0.18 sec)mysql>  insert into temp2 values(1234567.21, 1234567.21,1234567.21),(9876543.21,     -> 9876543.12, 9876543.12);Query OK, 2 rows affected (0.06 sec)Records: 2  Duplicates: 0  Warnings: 0mysql> select * from temp2;+------------+------------+------------+| id         | id2        | id3        |+------------+------------+------------+| 1234567.25 | 1234567.21 | 1234567.21 || 9876543.00 | 9876543.12 | 9876543.12 |+------------+------------+------------+2 rows in set (0.01 sec)mysql> desc temp2;+-------+---------------+------+-----+---------+-------+| Field | Type          | Null | Key | Default | Extra |+-------+---------------+------+-----+---------+-------+| id    | float(10,2)   | YES  |     | NULL    |       || id2   | double(10,2)  | YES  |     | NULL    |       || id3   | decimal(10,2) | YES  |     | NULL    |       |+-------+---------------+------+-----+---------+-------+3 rows in set (0.01 sec)复制代码

小案例2

mysql> drop table temp2;Query OK, 0 rows affected (0.16 sec)mysql> create table temp2(id double,id2 double);Query OK, 0 rows affected (0.09 sec)mysql> insert into temp2 values(1.235,1,235);ERROR 1136 (21S01): Column count doesn't match value count at row 1mysql> insert into temp2 values(1.235,1.235);Query OK, 1 row affected (0.03 sec)mysql> mysql> select * from temp2;+-------+-------+| id    | id2   |+-------+-------+| 1.235 | 1.235 |+-------+-------+1 row in set (0.00 sec)mysql> insert into temp2 values(3.3,4.4);Query OK, 1 row affected (0.09 sec)mysql> select * from temp2;+-------+-------+| id    | id2   |+-------+-------+| 1.235 | 1.235 ||   3.3 |   4.4 |+-------+-------+2 rows in set (0.00 sec)mysql> select id-id2 from temp2;+---------------------+| id-id2              |+---------------------+|                   0 || -1.1000000000000005 |+---------------------+2 rows in set (0.00 sec)mysql> alter table temp2 modify id decimal(10,5);Query OK, 2 rows affected (0.28 sec)Records: 2  Duplicates: 0  Warnings: 0mysql> alter table temp2 modify id2 decimal(10,5);Query OK, 2 rows affected (0.15 sec)Records: 2  Duplicates: 0  Warnings: 0mysql> select * from temp2;+---------+---------+| id      | id2     |+---------+---------+| 1.23500 | 1.23500 || 3.30000 | 4.40000 |+---------+---------+2 rows in set (0.00 sec)mysql> select id-id2 from temp2;+----------+| id-id2   |+----------+|  0.00000 || -1.10000 |+----------+2 rows in set (0.00 sec)复制代码

相关免费学习推荐:mysql视频教程

以上就是总结MySQL中float、double、decimal三个浮点类型的区别的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/293786.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月4日 21:44:40
下一篇 2025年11月4日 21:46:14

相关推荐

  • 网络进化!

    Web 应用程序从静态网站到动态网页的演变是由对更具交互性、用户友好性和功能丰富的 Web 体验的需求推动的。以下是这种范式转变的概述: 1. 静态网站(1990 年代) 定义:静态网站由用 HTML 编写的固定内容组成。每个页面都是预先构建并存储在服务器上,并且向每个用户传递相同的内容。技术:HT…

    2025年12月24日
    000
  • 为什么多年的经验让我选择全栈而不是平均栈

    在全栈和平均栈开发方面工作了 6 年多,我可以告诉您,虽然这两种方法都是流行且有效的方法,但它们满足不同的需求,并且有自己的优点和缺点。这两个堆栈都可以帮助您创建 Web 应用程序,但它们的实现方式却截然不同。如果您在两者之间难以选择,我希望我在两者之间的经验能给您一些有用的见解。 在这篇文章中,我…

    2025年12月24日
    000
  • CSS中float布局介绍

    CSS中的float布局介绍 在网页开发中,我们经常会用到CSS来控制页面的样式和布局。其中,float布局是一种常用的布局方式。它可以实现元素的浮动效果,使得多个元素并排显示。本文将介绍float布局的用法和常见应用,并提供具体的代码示例。 一、float布局的用法 使用float属性 在CSS中…

    2025年12月24日
    000
  • CSS 相对布局属性详解:position 和 relative

    CSS 相对布局属性详解:position 和 relative 在前端开发中,布局常常是开发者需要面对的问题,为了更好地控制元素在页面中的位置,CSS 提供了多种布局方式。其中,相对布局是一种非常常用的布局方式,通过使用 position 和 relative 属性,我们能够灵活地调整元素的位置和…

    2025年12月24日
    000
  • CSS 表格布局属性解读:table 和 display

    CSS 表格布局属性解读:table 和 display 在前端开发中,表格布局是常用的一种布局方式。CSS提供了一些表格布局属性,其中最常用的是table和display属性。下面将详细解读这两个属性,并给出具体的代码示例。 一、table 属性 table是CSS中用于设置元素为表格布局的属性。…

    2025年12月24日
    000
  • CSS 重叠属性解析:position 和 float

    CSS 重叠属性解析:position 和 float 在CSS中,position和float 是两个常用的重叠属性,它们可以改变元素的布局行为,实现各种复杂的页面效果。本文将详细解析这两个属性,并给出具体的代码示例。 一、position 属性 position属性定义了元素的定位方式,常用的取…

    2025年12月24日
    000
  • css中如何清除float

    css中清除float的方法是,为父元素设置【overflow:auto】。设置之后,内容元素会被修剪,超出元素将不可见。我们还可以通过增加空标签,或者使用【:after】伪元素来清除float。 本文操作环境:windows10系统、css 3、thinkpad t480电脑。 我们先来说下清除浮…

    2025年12月24日
    000
  • CSS中元素的浮动用什么属性

    CSS中元素的浮动用float属性。float属性用于定义元素在哪个方向浮动;元素使用了float属性后,可以使该元素脱离标准流本身,浮动在其他元素之上,使其不再占用原本属于该元素的空间,但也会导致后面的元素上移并占用原本属于该元素的空间。 本教程操作环境:windows7系统、CSS3&&…

    2025年12月24日
    000
  • css浮动的属性是什么

    css浮动的属性是指“float”属性,用于指定一个盒子(元素)是否应该浮动,定义朝哪个方向浮动。元素使用了float属性后,可以使该元素脱离标准流本身,浮动在其他元素之上,使其不再占用原本属于该元素的空间。 本文操作环境:windows10系统、css3版本,Dell G3电脑。 1. 页面布局方…

    2025年12月24日 好文分享
    000
  • 如何解决css float错位问题

    css float错位的解决办法:1、当两个同级的元素发生错位时,在两个元素之间添加一个空标签;2、设置CSS属性为“.clear{clear:both;}”即可。 本教程操作环境:windows7系统、css3版、thinkpad t480电脑。 推荐:《css视频教程》 float属性使用后导致…

    2025年12月24日
    000
  • 为什么要清除浮动?怎样清除?(float)

    一、理解清除浮动 1、为什么要清除浮动 我们前面说过,浮动本质是用来做一些文字混排效果的,但是被我们拿来做布局用,则会有很多的问题出现。 由于浮动元素不再占用原文档流的位置,所以它会对后面的元素排版产生影响,为了解决这些问题,此时就需要在该元素中清除浮动。 推荐学习:CSS视频教程 准确地说,并不是…

    2025年12月24日 好文分享
    000
  • css左浮动怎么写?

    在css中可以通过float属性来定义元素在哪个方向浮动;想要左浮动则只需将元素的float属性的值设置为left(float:left)即可。下面就来给大家介绍一下float属性,希望对你们有所帮助。 css float属性 float 属性指定一个盒子(元素)是否应该浮动,在哪个方向浮动。浮动元…

    2025年12月24日
    000
  • CSS布局中flex、grid以及float属性之间的差别是什么

    在CSS布局中,flex、grid以及float属性的差别是flex属性适用于小的UI元素,grid属性适合用于为网站整体进行布局而float属性适合在较大的文本文章中设置图像 平时我们在写页面时为了实现各种网络布局,常常会用到flex或者grid以及float属性。每一种布局技术都有其优缺点,接下…

    2025年12月24日 好文分享
    000
  • 清除浮动的方法有哪些

    清除浮动的方法有clearboth的方法、设置clearfix的方法、overflow的方法以及给父元素设置双伪元素的方法 在我们写代码的时候,有时因为使用了float浮动元素而导致页面中某些元素不能正确的显示,接下来在文章中将为大家详细介绍几种清除浮动的方法,具有一定的参考价值,希望对大家有所帮助…

    2025年12月24日
    000
  • CSS如何实现任意角度的扇形(代码示例)

    本篇文章给大家带来的内容是关于CSS如何实现任意角度的扇形(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 扇形制作原理,底部一个纯色原形,里面2个相同颜色的半圆,可以是白色,内部半圆按一定角度变化,就可以产生出扇形效果 扇形绘制 .shanxing{ position:…

    2025年12月24日
    000
  • float是什么?float属性详解

    float是什么?为什么要使用float?本篇文章就给大家介绍float是什么,让大家了解浮动对布局的作用,清除浮动的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 首先我们来了解一下float是什么? float是css的一个定位属性。要了解它的目的和来源,我们可以看一下印…

    2025年12月24日 好文分享
    000
  • css中如何设置float浮动居中?

    在css的float属性中有float:right向右浮动,float:left向左浮动,但是却没有设置居中的属性,那么如果我们想要实现float属性居中该怎么办呢?本篇文章就来给大家介绍有关于css中float属性居中的方法。 我们经常在做导航条的时候会用到浮动居中,下面我们就用实现导航条的浮动居…

    2025年12月24日
    000
  • 当float属性导致换行后,应该怎么处理?

    页面布局离不开float浮动的使用,当float属性导致换行后,应该怎么处理?想知道的小伙伴继续往下看吧,希望可以帮助到你。 在h5开发中,经常会使用float属性来解决一些布局问题。但在某些复杂的布局中也会遇到使用float属性是导致一行中的元素无法对齐或者float元素换行等现象。在遇到这种问题…

    好文分享 2025年12月24日
    000
  • css中Float属性详解

    这次给大家带来css中Float属性详解,使用css中Float属性的注意事项有哪些,下面就是实战案例,一起来看一下。 一、Float的特性 1. 应用于文字围绕图片 2. 创建一个块级框 3. 多列浮动布局 4. 浮动元素的宽度、高度自适应,但可以设置其值。 二、核心解决的问题 文字围绕图片:im…

    2025年12月24日 好文分享
    000
  • css中的float的图文详解

    这次给大家带来css中的float的图文详解,float的图文详解的注意事项有哪些,下面就是实战案例,一起来看一下。 float与margin 两个相邻的浮动元素,当第一个浮动元素(不论是左浮动还是右浮动)的宽度为100%时,第二个浮动元素会被挤到下面,通过添加负margin-right值(绝对值最…

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信