mysql小数类型
原文链接:https://blog.csdn.net/weixin_42047611/article/details/81449663
MySQL 中使用浮点数和定点数来表示小数。
浮点类型有两种,分别是单精度浮点数(FLOAT)和双精度浮点数(DOUBLE);定点类型只有一种,就是 DECIMAL。
浮点类型和定点类型都可以用(M, D)
来表示,其中M
称为精度,表示总共的位数;D
称为标度,表示小数的位数。
浮点数类型的取值范围为 M(1~255)和 D(1~30,且不能大于 M-2),分别表示显示宽度和小数位数。M 和 D 在 FLOAT 和DOUBLE 中是可选的,FLOAT 和 DOUBLE 类型将被保存为硬件所支持的最大精度。DECIMAL 的默认 D 值为 0、M 值为 10。
下表中列出了 MySQL 中的小数类型和存储需求。
类型名称 | 说明 | 存储需求 |
---|---|---|
FLOAT | 单精度浮点数 | 4 个字节 |
DOUBLE | 双精度浮点数 | 8 个字节 |
DECIMAL (M, D),DEC | 压缩的“严格”定点数 | M+2 个字节 |
DECIMAL 类型不同于 FLOAT 和 DOUBLE。DOUBLE 实际上是以字符串的形式存放的,DECIMAL 可能的最大取值范围与 DOUBLE 相同,但是有效的取值范围由 M 和 D 决定。如果改变 M 而固定 D,则取值范围将随 M 的变大而变大。
从上表中可以看到,DECIMAL 的存储空间并不是固定的,而由精度值 M 决定,占用 M+2 个字节。
FLOAT 类型的取值范围如下:
- 有符号的取值范围:-3.402823466E+38~-1.175494351E-38。
- 无符号的取值范围:0 和 -1.175494351E-38~-3.402823466E+38。
DOUBLE 类型的取值范围如下:
- 有符号的取值范围:-1.7976931348623157E+308~-2.2250738585072014E-308。
- 无符号的取值范围:0 和 -2.2250738585072014E-308~-1.7976931348623157E+308。
提示:不论是定点还是浮点类型,如果用户指定的精度超出精度范围,则会四舍五入进行处理。
FLOAT 和 DOUBLE 在不指定精度时,默认会按照实际的精度(由计算机硬件和操作系统决定),DECIMAL 如果不指定精度,默认为(10,0)。
浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的范围;缺点是会引起精度问题。
最后再强调一下:在 MySQL 中,定点数以字符串形式存储,在对精度要求比较高的时候(如货币、科学数据),使用 DECIMAL 的类型比较好,另外两个浮点数进行减法和比较运算时也容易出问题,所以在使用浮点数时需要注意,并尽量避免做浮点数比较。
我们在Mysql中存字段的时候,比如,一些与金钱有关的数据。这个时候就会对精确到的要求非常高。那么这个时候,就会发现我们之前所学的八大基本类型不再能够满足需求,无论是整形还是浮点型,有人会说存整形有什么不可,但是你要知道不是每个人的金额都是整数的;这样不行的话,存浮点型的就可以了嘛,对于银行存钱来说,一个小数点的问题都会将一笔钱的金额变得很大或者很小......So,这个时候你可以尝试一下Decimal类型,你会发现能够很好地解决你的问题。
decimal详细介绍:
decimal(a,b)
参数说明:
a:指定小数点左边和右边可以存储的十进制数字的最大个数,最大精度为38.
b:指定小数点右边可以存储的十进制数字的最大个数。小数位数必须是从0~a之间的值,默认小数位数是0.
举例说明,11615.23653234568这个数存你说的三个格式
decimal:11615
decimal(3):999
decdimal(3,2):9.99
decimal(10,5)11615.23653
超出精度范围的数会被强制进位并只显示数据类型定义的格式
备注:
decimal数据类型用于要求非常高的精确计算中,这些类型允许指定数值的精确度和计算方法作为选择参数。精确度在这里指为这个值保存的有效数字的总个数。而计数方法指的是小数点后数字的个数。例如:decimal(5,2)规定了存储的值将不会超过五位数字 ,而且小数点后面有两位数字。
实例1:
mysql> create table t1(c1 float(10,2), c3decimal(10,2)); Query OK, 0 rows affected (0.02 sec)
mysql> insert into t1 values(9876543.21, 9876543.12); Query OK, 1 row affected (0.00 sec)
mysql> select * from t1; +----------------+----------------+ | c1 | c3 | +----------------+----------------+ | 9876543.00 | 9876543.12 | +----------------+-----------------+ 2 rows in set (0.00 sec)
会发现,flocat类型的字段会自动将值四舍五入,而decimal类型的不会,如果用flocat类型的去存与金额有关的数据的时候就会出现问题,而decimal类型的就不会。
实例2:decimal(5,2)
mysql> create table t1(id1 float(5,2) default null,id2 double(5,2) default null,
id3 decimal(5,2) default null ); mysql> insert into t1 values(1.2345,1.2345,1.2345);
Query OK, 1 row affected, 1 warning (0.04 sec) mysql> show warnings;
+-------+------+------------------------------------------+
| Level | Code | Message |
+-------+------+------------------------------------------+
| Note | 1265 | Data truncated for column 'id3' at row 1 |
+-------+------+------------------------------------------+
1 row in set (0.00 sec)
1.2345 --- 小数点后最多2位,所以保存可以,自动四舍五入数据截断,但会报waning
12.34 --- OK
1234.5 --- 因为小数部分未满2位,要补0.所以保存应该1234.50。所以整个位数超出了5,保存报错。
1.2 --- 小数未满部分补0。按照1.20保存。
默认状态比较:
浮点数如果不写精度和标度,会按照实际精度值保存,如果有精度和标度,则会自动将四舍五入后的结果插入,系统不会报错;定点数如果不写精度和标度,则按照默认值decimal(10,0)来操作,如果数据超过了精度和标度值,系统会报错。
mysql小数类型的更多相关文章
- MySQL (二)-- 数据类型(列类型)、数值类型、 小数类型、 时间日期类型、 字符串类型 、 MySQL记录长度、列属性
1 数据类型(列类型) 所谓的数据类型:对数据进行统一的分类,从系统的角度出发是为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中将数据类型分成了三大类: 2 数值类型 数值类型数据:都 ...
- MySQL数字类型中的三种常用种类
数字类型 MySQL数字类型按照我的分类方法分为三类:整数类.小数类和数字类. MySQL数字类型之一我所谓的“数字类” 就是指 DECIMAL 和 NUMERIC,它们是同一种类型.它严格的说不是一 ...
- mysql索引总结(1)-mysql 索引类型以及创建
mysql索引总结(1)-mysql 索引类型以及创建 mysql索引总结(2)-MySQL聚簇索引和非聚簇索引 mysql索引总结(3)-MySQL聚簇索引和非聚簇索引 mysql索引总结(4)-M ...
- (转)MySQL字段类型详解
MySQL字段类型详解 原文:http://www.cnblogs.com/100thMountain/p/4692842.html MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间 ...
- Mysql 数值类型
Mysql数值类型 整数型 小数型(浮点数) 日期时间型
- 06、MySQL—列类型
1.整数类型 I.有符号整型 (1) Tinyint:单字节整形,系统采用一个字节来保存的整形:一个字节 = 8位,最大能表示的数值是0-255. (2) Smallint:双字节整形,系统采用两个字 ...
- mysql float类型详解
mysql float类型详解float类型长度必须设置3以上 不然会报错 out of range如果设置3 就只是 整数+小数的长度 比方说3.23 3.2等等 3.333就不行了 4位了
- 转:mysql datetime类型精确到毫秒、微秒的问题
原文地址:mysql datetime类型精确到毫秒.微秒的问题 mysql里面的datetime类型的精确度是可以到1/ 10 ^ 6 秒的某些客户端(如navicat for mysql)的显示经 ...
- MySql 字段类型对应 Java 实体类型
前言 MySQL Connector/J 对于 MySql 数据类型和 Java 数据类型之间的转换是很灵活的: 一般来讲,任何 MySql 数据类型都可以被转换为一个 java.lang.Strin ...
随机推荐
- HDU5293 树链剖分+树形DP
=-=抓住叶节点往上揪 Tree chain problem Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K ...
- vue2.0+mint-ui 仿资讯类顶导航内容联动优化
<template><div><div class="navbox"><div class="nav" id=&quo ...
- AspectJ JoinPoint及ProceedingJoinPoint 简要api文档
AspectJ使用org.aspectj.lang.JoinPoint接口表示目标类连接点对象,如果是环绕增强时,使用org.aspectj.lang.ProceedingJoinPoint表示连接点 ...
- Magicodes.IE 2.2发布
Magicodes.IE 导入导出通用库,支持Dto导入导出以及动态导出,支持Excel.Word.Pdf.Csv和Html.已加入NCC开源组织. Magicodes.IE 2.0发布 Magico ...
- 轻便的一句话反弹shell语句
反弹shell往往是在攻击者无法直接连接受害者的情况下进行的操作,原因有很多,例如目标是局域网,或者开启防火墙的某些策略等情况,而这时,我们就可以让受害者主动向攻击者发起连接,被控端发起请求到控制端某 ...
- burpsuite 关于部分https抓包失败原因
没导入证书 burpsuite生成证书 der格式,名字随便取,一路next firefox浏览器导入 导入,勾选信任证书ok,重启浏览器 还有你要勾选这里,确保所有流量都走你的代理 ps:遇到浏 ...
- 多用户vps管理面板怎么安装,有没有好用的vps管理工具
一.VPS安装VPSMate控制面板步骤 1.使用SSH连接到VPS.使用命令获取VPSMate安装包: wget http://www.vpsmate.org/tools/install.py ...
- ES6-函数与数组命名
1 箭头函数 1.1 以往js function 名字(){ 其他语句 } 1.2 现在ES6 修正了一些this,以前this可以变 ()=>{ 其他语句 } 如果只有一个参数,()可以省 . ...
- jchdl - GSL实例 - Mul(无符号数的乘法)
这里实现最原始的阵列乘法,逐位相乘然后加到一起. 参考链接 https://github.com/wjcdx/jchdl/blob/edcc3e098d4f1cb21677e86e87a114 ...
- 高性能可扩展mysql 笔记(五)商品实体、订单实体、DB规划
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.商品模块 商品实体信息所存储的表包括: 品牌信息表: create table `brand_i ...