`
lg_techie
  • 浏览: 114315 次
  • 性别: Icon_minigender_1
  • 来自: cq
最近访客 更多访客>>
社区版块
存档分类
最新评论

decimal(numeric )、float 和 real 数据类型的区别

阅读更多

本文转至【http://blog.ahnw.gov.cn/user1/itblog/archives/2007/8599.html】

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

float 和 real                      不能精确存储数值


decimal 数据类型最多可存储 38 个数字,所有数字都能够放到小数点的右边。decimal 数据类型存储了一个准确(精确)的数字表达法;不存储值的近似值。

定义 decimal 的列、变量和参数的两种特性如下:

  • p   小数点左边和右边数字之和,不包括小数点。如 123.45,则 p=5,s=2。

    指定精度或对象能够控制的数字个数。

  • s

    指定可放到小数点右边的小数位数或数字个数。

    p 和 s 必须遵守以下规则:0 <= s <= p <= 38。

numericdecimal 数据类型的默认最大精度值是 38。在 Transact-SQL 中,numeric decimal 数据类型在功能上等效。

当数据值一定要按照指定精确存储时,可以用带有小数的 decimal 数据类型来存储数字。

float 和 real 数据

float real 数据类型被称为近似的数据类型。在近似数字数据类型方面,floatreal 数据的使用遵循 IEEE 754 标准。

近似数字数据类型并不存储为多数数字指定的精确值,它们只储存这些值的最近似值。在很多应用程序中,指定值与存储值之间的微小差异并不明显。但有时这些差异也值得引起注意。由于 floatreal 数据类型的这种近似性,当要求精确的数字状态时,比如在财务应用程序中,在那些需要舍入的操作中,或在等值核对的操作中,就不使用这些数据类型。这时就要用 integerdecimalmoneysmallmone 数据类型。

在 WHERE 子句搜索条件中(特别是 = 和 <> 运算符),应避免使用 floatreal 列。最好限制使用 floatreal 列做 > 或 < 的比较。

IEEE 754 规格提供了四种舍入模式:舍入到最接近的值、上舍入、下舍入和舍入到零。Microsoft® SQL Server™ 使用上舍入。所有的数值必须精确到确定的精度,但会产生细小的浮点值变化。因为浮点数字的二进制表示法可以采用很多合法舍入规则中的任意一条,因此我们不可能可靠地量化一个浮点值。

转换 decimal 和 numeric 数据

对于 decimal numeric 数据类型,Microsoft® SQL Server™ 将精度和小数位数的每个特定组合看作是不同的数据类型。例如,decimal (5,5 ) 和 decimal (5,0 ) 被当作不同的数据类型。

在 Transact-SQL 语句中,带有小数点的常量自动转换为 numeric 数据值,且必然使用最小的精度和小数位数。例如,常量 12.345 被转换为 numeric 值,其精度为 5,小数位为 3。

decimal numeric floatreal 转换会导致精度损失。从 intsmallinttinyintfloatrealmoney smallmoneydecimalnumeric 转换会导致溢出。

默认情况下,在将数字转换为较低精度和小数位数的 decimalnumeric 值时,SQL Server 使用舍入法。然而,如果 SET ARITHABORT 选项为 ON,当发生溢出时,SQL Server 会出现错误。若仅损失精度和小数位数,则不会产生错误。

分享到:
评论

相关推荐

    SQL中NUMERIC和DECIMAL的区别

    - 当从`DECIMAL`或`NUMERIC`数据类型转换为`FLOAT`或`REAL`时,可能会导致精度损失。这是因为`FLOAT`和`REAL`数据类型是近似数值类型,它们存储的值是近似的而不是精确的。 - **其他类型转换**: - 从`INT`、`...

    SQL数据库数据类型说明

    SQL 数据库中的数值型数据类型包括 numeric、decimal、money 和 smallmoney 等。 * numeric 数据类型:可以存储从 10^38 到 10^38 之间的数值,精度可以指定。 * decimal 数据类型:与 numeric 数据类型相同,用于...

    SQL_Server_数据类型详解

    浮点型数据类型用于存储十进制小数,包括 real 型、float 型、decimal 型和 numeric 型。 * real 型数据的存储大小为 4 个字节,可精确到小数点后第 7 位数字。这种数据类型的数据存储范围为从-3.40E+38 ~ -1.18E-...

    SQL SERVER的数据类型自定义

    1. **数值类型**:包括整数类型(如`int`、`smallint`、`tinyint`)、浮点类型(如`float`、`real`)以及精确数值类型(如`decimal`、`numeric`)。这些类型适用于存储数值数据,其中`decimal`和`numeric`类型允许...

    SQL SEVER 数据类型

    除了上述数据类型外,SQL Server 还提供了其他数据类型,包括 Decimal、Numeric、Float、Real、Int、Smallint、Tinyint、Money、Smallmoney、Bit、Cursor、Sysname、Timestamp、Uniqueidentifier 等。 数据类型的...

    SQL 数据类型详细介绍

    浮点型数据类型用于存储十进制小数,包括 real、float、decimal 和 numeric 四种。real 型数据的存储大小为 4 个字节,数值范围是-3.40E+38~-1.18E-38 和 1.18E-38~3.40E+38;float 型数据的存储大小为 8 个字节,...

    sql数据类型说明

    - **描述**:`DECIMAL` 和 `NUMERIC` 数据类型相同,可以提供小数所需的实际存储空间,但也有一定限制。它们可以存储从 `-10^38 - 1` 到 `10^38 - 1` 之间的数值。 - **存储**:`DECIMAL` 和 `NUMERIC` 类型根据...

    主流数据库数据类型的比较

    - MS SQL Server的数值类型包括decimal、numeric、money和smallmoney,以及float和real。 - Oracle的数值类型主要是number,可以指定精度和小数位数。 - DB2的数值类型包括decimal、numeric、real和double,其中...

    SQL2000数据类型

    在SQL Server 2000中,数据类型主要分为几大类别,包括整数数据类型、浮点数据类型、二进制数据类型、字符数据类型、日期和时间数据类型、以及其他特殊数据类型。 一、整数数据类型 1. INT (INTEGER):INT数据类型...

    MSSQLServer数据类型详解

    - **定义**: `NUMERIC` 数据类型与 `DECIMAL` 数据类型完全相同。 - **存储**: 同 `DECIMAL` 类型一样,可以根据需要使用不同的字节数量来存储。 #### 四、二进制数据类型 二进制数据类型用于存储二进制数据。 ##...

    sql server 和oracle 中数据类型的区别

    它们各自拥有不同的特点和优势,并且在数据类型的定义上也存在差异。本文将深入探讨SQL Server与Oracle中的数据类型区别,并通过具体的例子来说明这两种系统之间的转换方法。 ### SQL Server 数据类型 SQL Server ...

    SQL2005 数据类型

    Decimal和Numeric数据类型用于存储高精度的数值,范围为`-10^38-1`到`10^38-1`,在定义时需要指定精度和小数位数。这种类型特别适用于财务计算和其他需要高精度数值运算的场景。 #### Float (近似数值型) Float...

    sqlserver2008数据类型[定义].pdf

    SQL Server 2008 中的数值数据类型包括 integer、smallint、tinyint、bigint、decimal、numeric、float、real 和 money 等。这些数据类型用于存储数值数据。例如,integer 数据类型用于存储整数值,而 decimal 数据...

    SqlServer数据库的数据类型

    - **Float[(n)]**、**Real**:这两个数据类型用于存储近似数值数据。`Real`是`Float`的一个子类型,它们都使用科学计数法存储数值,但在存储精度和占用空间上有所不同。 #### 7. 货币数据类型 - **Money**:用于...

    GBase 8s支持数据类型

    数字类型是 GBase 8s 中最基本的数据类型,包括 SMALLINT、INTEGER、INT8、BIGINT、DECIMAL、NUMERIC、FLOAT、SMALLFLOAT、REAL、DOUBLE、LONG、SERIAL、SERIAL8、BIGSERIAL、MONEY 等。这些数字类型可以满足各种...

    SQL数据类型和转换

    在SQL中,数据类型是用来定义和组织数据的基本结构,它们决定了数据可以存储的类型和形式。转换则是将一种数据类型转换成另一种的过程,这在处理不同系统或接口间的数据交互时非常常见。JDBC(Java Database ...

    SQL数据类型与C#数据类型转换

    ### SQL数据类型与C#数据类型的转换 在开发过程中,我们经常会遇到需要将数据库中的数据类型映射到编程语言中的情况。特别是在使用SQL Server作为后端数据库与C#进行交互时,了解这两种环境下的数据类型及其对应...

    文档-数据库函数-数据类型

    DECIMAL和NUMERIC是定点数类型,提供精确数值计算,它们允许指定小数位数。 3. 字符串类型:CHAR和VARCHAR是最常见的字符串数据类型。CHAR是固定长度的,而VARCHAR是可变长度的。还有NCHAR和NVARCHAR,它们用于存储...

    SQL Server常用数据类型.pdf

    了解并掌握SQL Server的各种数据类型,对于数据库管理员和开发人员而言是基础且重要的技能,这有助于他们更加高效地设计和维护数据库系统,确保数据的安全性和完整性。同时,熟悉这些数据类型也便于进行数据库的性能...

    SQL SERVER数据类型表

    - **浮点型和定点型**: `float`和`real`用于存储浮点数,其中`real`是4字节,精度约为7位小数,`float`则有8字节版本(精度约为15位小数)和16字节版本(精度约为30位小数)。`decimal`和`numeric`是定点数类型,...

Global site tag (gtag.js) - Google Analytics