概述:

浮点数据类型包括real型、float型、decimal型和numeric型。浮点数据类型用于存储十进制小数。

在SQL Server 中浮点数值的数据采用上舍入(Round up)的方式进行存储,所谓上舍入也就是,要舍入的小数部分不论其大小,

只要是一个非零的数,就要在该数字的最低有效位上加1,并进行必要的进位。

由于浮点数据为近似值,所以并非数据类型范围内的所有数据都能精确地表示。

1、区别说明

decimal(numeric):同义,用于精确存储数值

float 和 real:不能精确存储数值

2、real数据类型

real型数据的存储大小为4个字节,可精确到小数点后第7位数字。

这种数据类型的数据存储范围为从-3.40E+38~-1.18E-38,0和1.18E-38~3.40E+38。

在MSSQL中real的同义词是float,用法几乎一样。

3、float数据类型

float型的数据存储大小为8个字节,可精确到小数点后第15位数字。

这种数据类型的数据存储范围为从-1.79E+308~-2.23E-308,0和2.23E+308~1.79E+308。

FLOAT(size,d) 带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。

float型的数据可写成float[(n)]的形式。其中n是1~15之间的整数值,指定float型数据的精度。当n为1~7时,实际上用户定义了一个real型的数据,系统用4个字节存储;

当n为8~15时,系统认为它是个float型的数据,用8个字节存储它。这样既增强了数据定义的灵活性,又节省了空间。

4、decimal(numeric)数据类型

decimal数据类型和numeric数据类型的功能完全一样,它们都可以提供小数所需要的实际存储空间,

但也有一定的限制,用户可以用2~17个字节来存储数据,取值范围是-1038+1~1038-1。

DECIMAL(size,d) 作为字符串存储的 DOUBLE 类型,允许固定的小数点。在括号中规定最大位数。

其中size表示可供存储的值的总位数(不包括小数点),默认值为18;d表示小数点后的位数,默认值为0;

参数之间的关系是0≤d≤size。例如:decimal(15,5)表示共有15位数,其中整数10位,小数5位。

若一个数是上舍入数,其绝对值不会减少。如:对3.14159265358979 分别进行2 位和12位舍入,结果为3.15 和3.141592653590。

在精度上还是有很大的差别的,所以在创建数据库时一定要对字段的数据类型进行精准的分析,确保在插入数据值的最大精度上不要出现差错这样才不会使数据在运算的过程中出现大的偏差。

例如在月底或者年底汇总报表时查询出的数据是小数,在运算完以后的数据也是小数,可是在增加到汇总表里的时候变成整数了,

这种情况往往就是数据库中表在建立的时候没有有效的设置浮点型数据的小数点后面精度的问题使其数据发生了上舍入现象。

说明:

舍入是一种修约规则。在日常的生活中,我们为了精简格式,记忆方便,常常用四舍五入的方法来去掉零头或凑个整数来解决此问题。

四舍五入是一种非常灵活的方法。因此不管是在日常生活中还是在数学计算中四舍五入方法应用的都比较广泛。

除了四舍五入的舍入方法外还有其他不同的舍入规则、在数学中也有其独特的定义。

创建的表:

实例1:

这边我创建了个表用的real,float,decimal,我创建的字段类型是DECIMAL(3,1),长度是3,小数为1

查询出来的数据,遵循四舍五入,这里我插入了88.04,所以查询出来是88.0

实例2:

这边我对decimal的字段插入88.05,查询出来的数据是88.1

实例3:

这边测试一下超过长度会怎样,小数位在表中是保留1位,所以无论你输入多少位,都是保留1位,也不会报错,但是超出长度就会报错

将 varchar 转换为数据类型 numeric 时出现算术溢出错误。

按照上面实例插入了两条数据,可得知结果:

SQL中的real、float、decimal、numeric数据类型区别的更多相关文章

  1. SQL中IS NOT NULL与!=NULL的区别

    平时经常会遇到这两种写法:IS NOT NULL与!=NULL.也经常会遇到数据库有符合条件!=NULL的数据,但是返回为空集合.实际上,是由于对二者使用区别理解不透彻. 默认情况下,推荐使用 IS ...

  2. 述 SQL 中的 distinct 和 row_number() over() 的区别及用法

    1 前言 在咱们编写 SQL 语句操作数据库中的数据的时候,有可能会遇到一些不太爽的问题,例如对于同一字段拥有相同名称的记录,我们只需要显示一条,但实际上数据库中可能含有多条拥有相同名称的记录,从而在 ...

  3. 详述 SQL 中的 distinct 和 row_number() over() 的区别及用法

    1 前言 在咱们编写 SQL 语句操作数据库中的数据的时候,有可能会遇到一些不太爽的问题,例如对于同一字段拥有相同名称的记录,我们只需要显示一条,但实际上数据库中可能含有多条拥有相同名称的记录,从而在 ...

  4. sql中内联 和外联 区别

    sql中内联 和外联 区别 2007-05-15 17:37 这个概念一般看书不好理解.其实夜简单.有例子就简单了. 比如: 表A(主表) cardid username 16 aa 23 bb 25 ...

  5. golang中int、float、string数据类型之间的转换

    package main import ( "fmt" "strconv" ) func main() { var num1 int = 88 var num2 ...

  6. SQL中char、varchar、nvarchar的区别

    char    char是定长的,也就是当你输入的字符小于你指定的数目时,char(8),你输入的字符小于8时,它会再后面补空值.当你输入的字符大于指定的数时,它会截取超出的字符.   nvarcha ...

  7. SQL中char、varchar、nvarchar的区别(zhuan)

    char    char是定长的,也就是当你输入的字符小于你指定的数目时,char(8),你输入的字符小于8时,它会再后面补空值.当你输入的字符大于指定的数时,它会截取超出的字符.   nvarcha ...

  8. [转]SQL中char、varchar、nvarchar的区别

    char    char是定长的,也就是当你输入的字符小于你指定的数目时,char(8),你输入的字符小于8时,它会再后面补空值.当你输入的字符大于指定的数时,它会截取超出的字符.   nvarcha ...

  9. SQL中on条件与where条件的区别(转载)

    数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户. 在使用left jion时,on和where条件的区别如下: 1. on条件是在生成临时表时使用的条 ...

随机推荐

  1. Nginx-负载均衡实现解读

    负载均衡在服务端开发中算是一个比较重要的特性.因为Nginx除了作为常规的Web服务器外,还会被大规模的用于反向代理前端,因为Nginx的异步框架可以处理很大的并发请求,把这些并发请求hold住之后就 ...

  2. Python经典算法-快速幂

    快速幂 问题描述: 计算a ** n % b 其中a.b和n都是32位的非负整数 即求a的n次方对b的余数 问题示例: 例如:2**31%3=2 --- 代码实现如下 class Solution: ...

  3. Shell常用命令之curl

    curl命令 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具.它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具. ...

  4. 线程安全之 synchronized 和 ReentrantLock

    线程安全之 synchronized 和 ReentrantLock + 面试题 前面我们介绍了很多关于多线程的内容,在多线程中有一个很重要的课题需要我们攻克,那就是线程安全问题.线程安全问题指的是在 ...

  5. 详解隐马尔可夫模型(HMM)中的维特比算法

    笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP 4. 隐马尔可夫模型与序列标注 第3章的n元语法模型从词语接续的流畅度出发,为全切 ...

  6. Dubbo(三):深入理解Dubbo源码之如何将服务发布到注册中心

    一.前言 前面有说到Dubbo的服务发现机制,也就是SPI,那既然Dubbo内部实现了更加强大的服务发现机制,现在我们就来一起看看Dubbo在发现服务后需要做什么才能将服务注册到注册中心中. 二.Du ...

  7. ROS和Gazebo进行机器人仿真(一)

    Gazebo是一种多机器人仿真器,可用于室内外机器人仿真.Gazebo在ROS中有良好的接口,包含ROS和Gazebo的所有控制. 若要实现ROS到Gazebo的通信,我们必须安装ROS-Gazebo ...

  8. Ceph 存储集群4-高级运维:

    一.高级运维 高级集群操作主要包括用 ceph 服务管理脚本启动.停止.重启集群,和集群健康状态检查.监控和操作集群. 操纵集群 运行 Ceph 每次用命令启动.重启.停止Ceph 守护进程(或整个集 ...

  9. 拒绝低效!Python教你爬虫公众号文章和链接

    本文首发于公众号「Python知识圈」,如需转载,请在公众号联系作者授权. 前言 上一篇文章整理了的公众号所有文章的导航链接,其实如果手动整理起来的话,是一件很费力的事情,因为公众号里添加文章的时候只 ...

  10. DLL/EXE查看工具Dumpbin

    一般情况下,我们需要查看一个DLL或EXE中的包含的函数或是依赖的函数之类的信息,可以使用VS自带的工具dumpbin: 可以直接在命令行下输入dumpbin就可以查看他的使用说明,如果未显示,可以先 ...