添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

NUMERIC 和 DECIMAL 都存储十进制数并使用精确算术 - 与浮点数(REAL、FLOAT 等)相反,浮点数存储二进制数并使用不精确算术。因此,DECIMAL 或 NUMERIC 应该用于货币价值,而浮点数应该用于科学计算。

这两种类型都采用精度和规模的论据。精度是数字可以拥有的最大总位数。刻度是小数点后的位数。对于数字 9167.142,精度为 7,小数位数为 3。

这两种类型之间的主要区别在于它们处理精度值的方式。在数值类型中,精度值是固定的。这意味着您不能超过精度值。另一方面,在十进制中,您可以超过精度值。它为您可以存储的值的总数提供了一些灵活性。

让我们仔细看看类型的语法和定义。

2. 数字定义

语法如下所示:

NUMERIC(p, s)

… 在哪里:

  • p = 精度,或要存储的最大总位数(包括小数点两边)。 此值必须介于 1 和 38 之间。p 的默认值为 18。
  • s = 比例,或小数点右侧的位数。 仅在指定精度 (p) 时才能指定。 默认值为 0。
  • DECLARE @MyNumeric NUMERIC(6, 2)

    此处,精度为 6 位,小数点右侧有 2 位。 因此,有效数字为 4162.34、9245.12,无效数字为 10729.32(尽管小数点右侧有 2 个数字,但精度是 7 而不是 6)。

    NUMERICtype 可以存储的值范围是 -10³⁸+1 到 10³⁸。

    3. 十进制定义

    DECIMAL(p, s)

    … 在哪里:

  • p = 精度。 但是位数实际上可以大于 p。
  • s = 比例,与为 NUMERIC 指定的比例完全相同。
  • 4.其他SQL引擎中的NUMERIC和DECIMAL

    让我们看看一些 SQL 方言以及它们如何处理 DECIMAL 和 NUMERIC 表示。

    MySQL

    在 MySQL 中,NUMERIC 类型被实现为 DECIMAL。 因此无需担心精度和比例差异。

    PostgreSQL

    DECIMAL 的处理方式与 NUMERIC 完全相同。DECIMAL 中的精度不能大于指定的精度。

    Oracle

    Oracle 有 DECIMAL 和 NUMBER(不是 NUMERIC)类型。

    它们是有区别的:

  • NUMERIC 定义准确地表示所要求的精度。
  • DECIMAL 将至少具有所要求的精度,但它可能具有更多。 (但是,小数点右侧的数字保持不变。)
  • 返回搜狐,查看更多

    责任编辑:

    声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
    发布于: 乌兹别克斯坦