SqlServer05的decimal(3,2)字段存100时为什么提示超出范围错误?

来源:百度知道 编辑:UC知道 时间:2024/06/20 13:20:48
我的理解是decimal(3,2)应该能存999.99这样的数吧?为什么提示超出范围错误呢?

我给你看SQL 对DECIMAL的官方定义:
decimal[(p[, s])] 和 numeric[(p[, s])]

定点精度和小数位数。使用最大精度时,有效值从 - 10^38 +1 到 10^38 - 1。decimal 的 SQL-92 同义词是 dec 和 dec(p, s)。

p(精度)

指定小数点左边和右边可以存储的十进制数字的最大个数。精度必须是从 1 到最大精度之间的值。最大精度为 38。

s(小数位数)

指定小数点右边可以存储的十进制数字的最大个数。小数位数必须是从 0 到 p 之间的值。默认小数位数是 0,因而 0 <= s <= p。最大存储大小基于精度而变
。很明确的,decimal(3,2)的定义中,3表示一共是三位数,包括整数部分和小数部分,2表示有两位小数。所以就出错了。例如999.99,应该写成decimal(5,2)的形式。

DECIMAL的官方定义:
decimal[(p[, s])] 和 numeric[(p[, s])]

定点精度和小数位数。使用最大精度时,有效值从 - 10^38 +1 到 10^38 - 1。decimal 的 SQL-92 同义词是 dec 和 dec(p, s)。

p(精度)
指定小数点左边和右边可以存储的十进制数字的最大个数。精度必须是从 1 到最大精度之间的值。最大精度为 38。

s(小数位数)
指定小数点右边可以存储的十进制数字的最大个数。小数位数必须是从 0 到 p 之间的值。默认小数位数是 0,因而 0 <= s <= p。最大存储大小基于精度而变。decimal(3,2)的定义中,3表示一共是三位数,包括整数部分和小数部分.