环境:

  • window10
  • vs2022
  • .net 6
  • mysql 8.0.25
  • DBeaver

参考:
《MSDN:浮点数值类型(C# 引用)》
《mysql:11.1.4 Floating-Point Types (Approximate Value) - FLOAT, DOUBLE》

1. float和double类型

在mysql中,float和double都是浮点数类型:

  • float 占4个字节,精度是6位;
  • double 占8个字节,精度是16位;

它们的性质和c#中浮点数的性质是一样的,只不过精度要求的更严格和明确一些;

参照:c#中浮点型的精度要求为

测试mysql中的float和double:

create table test(t_float float,t_double double
)insert into test.test (t_float) values(123456);-- 正常
insert into test.test (t_float) values(1234567);-- 四设五入 1234570
insert into test.test (t_float) values(12345678901);-- 失真 12345700352insert into test.test (t_float) values(12345.6); -- 正常
insert into test.test (t_float) values(12345.62); -- 四设五入 12345.6
insert into test.test (t_float) values(123.123); -- 正常
insert into test.test (t_float) values(12.1234); -- 正常
insert into test.test (t_float) values(1.12345); -- 正常
insert into test.test (t_float) values(1234.1234); -- 四设五入 1234.12-- double
insert into test.test (t_double) values(1234567890123456);-- 正常
insert into test.test (t_double) values(12345678901234567);-- 四设五入 12345678901234568
insert into test.test (t_double) values(123.12345678901);-- 正常
insert into test.test (t_double) values(1234567890.123456);-- 正常select * from test

输出如下:

我们可以认为是这样的:
当我们把数据插入float类型时,mysql会优先保留6位有效数字,对右侧的数字进行四舍五入;
当我们把数据插入double类型时,mysql会优先保留16位有效数字,对右侧的数字进行四设五入;

注意:mysql不会因为数据超范围而报错,比如:12345678901远超精度,但它只会数据失真并不会报错。

2. float和double语法

推荐的使用方法是:t_float floatt_double double,即:不添加其他参数。

但为了兼容sql标准,mysql中提供:float(p)这种写法,这里的p取值范围是:[0,53],超过范围会报错,另外:这里的p仅用来决定mysql内部采用float还是double存储,当p∈[0,23] 时,mysql采用float存储,当p∈[24,53]时,mysql采用double存储。

3. float和double的非推荐用法

上面说的是推荐用法,在推荐用法中mysql的float和c#的float行为表现基本一致。

还有非标准用法,比如:float(M,D),不过这种写法即将被弃用了。

虽然是被弃用,但它好像也并非一无是处:
float(M,D)中的M表示总有效数字,D表示小数位数。这有点像decimal(M,D)的M和D。

如果我们定义:float(5,2)的话,就表示:小数点后最大2位,小数点前最大3位,小数点前超过3位将报错,小数点后超过2位将四舍五入;

测试如下:

create table test(t_float5_2 float(5,2)
)insert into test.test (t_float5_2) values(123.12);-- 正常
insert into test.test (t_float5_2) values(1234.1);-- 报错: Out of range value
insert into test.test (t_float5_2) values(1.1234);-- 四设五入 1.12 select * from test

输出如下:

可以看到这种非标准用法限制更严格一点,不过因为它即将被启用,不做过多探索。

另外,double类型没有非标准的 double(M,D) 写法!

另外,除了float(M,D)还有real(M,D)和double precision(M,D)。

这里总结下它们的用法和区别:

4. c#中使用方式

由于mysql中的float和double都是浮点型数据,基本和c#中的float和double一一对应,所以在c#中我们完全可以使用float和double分别去替代,但一般我们在c#中会统一使用double,如下:

public class Model
{public double? t_float { get; set; }public double? t_double { get; set; }
}

5. 最后看下它们的元数据

create table test(t_float float,t_float7 float(7),t_float10 float(10),t_float35 float(35),t_float40 float(40),   t_double double,
--  t_double double(5), -- 报错t_float7_5 float(7,5), -- 弃用t_real real,t_real7_5 real(7,5),t_double_precision8_5 double precision(8,5)
)select c.TABLE_SCHEMA ,c.TABLE_NAME ,c.COLUMN_NAME ,c.ORDINAL_POSITION,c.DATA_TYPE,c.NUMERIC_PRECISION ,c.COLUMN_TYPE ,c.NUMERIC_SCALE
from information_schema.`COLUMNS` c  where TABLE_SCHEMA ='test' and TABLE_NAME ='test' order by ORDINAL_POSITION

最后

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

小编已加密:aHR0cHM6Ly9kb2NzLnFxLmNvbS9kb2MvRFVrVm9aSGxQZUVsTlkwUnc==出于安全原因,我们把网站通过base64编码了,大家可以通过base64解码把网址获取下来。

mysql:列类型之float、double相关推荐

  1. mysql小数类型字段_mysql小数类型字段,float,double

    mysql float double类型 1.float类型 float列类型默认长度查不到结果,必须指定精度, 比如 num  float,  insert into  table (num) va ...

  2. MySQL列类型之——数值类型

    如想进一步了解有关mysql的信息请点击http://dev.mysql.com/doc/refman/5.1/zh/column-types.html MySQL支持多种列类型:数值类型.日期/时间 ...

  3. Mysql列类型-数值型

    2019独角兽企业重金招聘Python工程师标准>>> 一.整数型: 1.取值范围: tinyint    smallint    mediumint    int    bigin ...

  4. 以下不属于mysql列类型的是什么意思_下列 ________ 类型不是 MySQL 中常用的的数据类型。_学小易找答案...

    [简答题]工作区跳线的制作 请依据EIA568国际标准,制作一根直通线(即两端都是EIA568B线芯排布规律) 做好网线后,请拍照上传作业. [单选题]UNIQUE 惟一索引的作用是 ( ) : [简 ...

  5. Mysql数值类型之float,double,decimal

    对于小数的表示,MySQL分为两种方式:浮点数和定点数.浮点数包括float(单精度),double(双精度),而定点数只有decimal一种表示.定点数在MySQL内部以字符串的形式存放,比浮点数更 ...

  6. mysql 常用的列类型_MySQL 常用列类型

    日期和时间类型为DATETIME.DATE.TIMESTAMP.TIME和YEAR. 注意:在MySQL中,日期时间值使用单引号引起来. 相当于Java中Date,Calender. 最常用的整数类型 ...

  7. mysql:列类型之时间日期

    环境: window10 vs2022 .net 6 mysql 8.0.25 DBeaver 参考: <MSDN:浮点数值类型(C# 引用)> <mysql:11.2 Date a ...

  8. mysql 体重 类型 身高_MySQL 数据类型

    介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 mysql常用数据类型概括: #1. 数字: 整型:tinyint int bigint 小 ...

  9. android float类型保留两位小数_你知道MySQL中Decimal类型和Float Double的区别吗?

    出处:cnblogs.com/panchanggui/p/10766607.html MySQL中存在float,double等非标准数据类型,也有decimal这种标准数据类型. 其区别在于,flo ...

最新文章

  1. Hiring data scientists
  2. 家用、商用、工业交换机的用途与区别
  3. 让每一首心动歌曲穿越人海遇见你,背后竟藏着这么多“黑科技”|回响·TME音乐公开课...
  4. 森海塞尔Momentum 2无线蓝牙耳机发布:首次加入主动降噪
  5. 杂(三)-The type java.lang.Object cannot be resolved It is indirectly referenced ...
  6. php主动防御,汽车主动防御系统
  7. cvc降噪和主动降噪_蓝牙耳机降噪功能CVC好还是DSP?
  8. 放大电路中反馈及类型的判断
  9. 单元词检索计算机,截词检索
  10. Deadlock found when trying to get lock; try restarting transaction 【MySQL死锁问题解决】
  11. 流媒体协议RTP、RTCP、H264详解
  12. Python面向对象版:学员管理系统(入门级练手)
  13. mysql查找附近算法_附近地点搜索解决方案
  14. Lisp 是怎么成为上帝的编程语言的
  15. 分享105个PHP源码,总有一款适合您
  16. 通用贷款计算器js 计算方法
  17. 赫宝铁甲格斗机器人系列_【为老铁打call】最直白的常规格斗机器人类型解说!以后别再说你不懂格斗机器人...
  18. java model类作用_SPRING框架中ModelAndView、Model、ModelMap区别及详细分析
  19. 薄元近似(TEA)与傅立叶模态方法(FMM)在光栅建模中的对比
  20. 计算机外部设备培训教学计划,最新计算机培训教学计划(8页)-原创力文档

热门文章

  1. FPGA——PS/2驱动
  2. 仿射变换affine和透视变换
  3. 宋宝华:LEP(Linux易用剖析器) 是什么,为什么以及怎么办(2)
  4. 计算机老出现无法响应,win7电脑经常出现“程序未响应”的提示怎么办?
  5. 美团外卖强杀门背后的真相,你看到的是真的吗?
  6. 数据结构入门6-2(图 - 图的应用)
  7. 求最大公约数和最小公倍数的方法:
  8. 我们公司使用了 5 年的系统限流方案 ,从实现到部署实战详解,稳的一B
  9. RANSAC与其改进
  10. 关于纯前端excel上传、下载功能