2010.12.14 关于decimal和Numeric类型

decimal:从-10^38到10^38-1的定精度与有效位数的数字
numeric:decimal的同义词

怎么理解Numberic类型呢?

Decimal数据类型,语法为:Decimal(P,S),P为精度,s为数字的小数位数

DECIMAL数据类型可以提供小数所需要的实际存储空间,但也有一定的限制。您可以用2 到17 个字节来存储从-1038-1 到1038-1 之间的数值(这句话不知道什么意思?),可将其写为DECIMAL[p ,s]的形式,p 和s 确定了精确的比例和数位。

其中p 表示可供存储的值的总位数,不包括小数点,缺省值为18。

s 表示小数点后的位数,缺省值为0。 例如decimal [15 5]。表示共有15 位数,其中整数10 位,小数5 位。也就是说,S用于小于等于P.

 

decimal 数据类型最多可存储 38 个数字,所有数字都能够放到小数点的右边。什么意思呢,就是说,假如定义numeric[18,8],那么能够表达的最大数是

      10位        8位

999999999.99999999              

decimal 数据类型有什么好处呢,就是相对于float类型,decimal存储了一个准确(精确)的数字表达法;不存储值的近似值。

在Sqlserver2005中做测试,假如设置p>38,则系统提示,精度必须<=38。那么这个38是从哪里来的呢?(这个38应该就是系统设定的)

 

 

为什么说“您可以用2 到17 个字节来存储从-1038-1 到1038-1 之间的数值”?

想想,decimal最多可存储38个数字,那么这38个数字的最大值是多少呢?9999999999....(一个38个9),那么需要用多大的空间来表达这38个9呢?大概需要17个字节。17个字节,17*8=136为,2的136次方,大约就是8.7e+40,e+40,表示10的40次方,大概是40位。

这样就明白上面这句话了,1038是指10的38次方。其实是这句话错了。

 

表4-3 列出了各精确度所需的字节数之间的关系表 DECIMAL数据类型的精度与字节数
精度                字节数
1 ~ 2                  2
3 ~ 4                  3
5 ~ 7                  4
8 ~ 9                  5
10 ~ 12                 6
13 ~ 14                 7
15 ~ 16                 8
17 ~ 19                 9
20 ~ 21                 10
22 ~ 24                 11
25 ~ 26                 12
27 ~ 28                 13
29 ~ 31                 14
32 ~ 33                 15
34 ~ 36                 16
37 ~ 38                 17

posted @ 2010-12-14 18:06  pjh123  阅读(625)  评论(0编辑  收藏  举报