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 将至少具有所要求的精度,但它可能具有更多。 (但是,小数点右侧的数字保持不变。)
返回搜狐,查看更多
责任编辑:
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
发布于:
乌兹别克斯坦