NUMBER数据类型在Oracle中使用的较为广泛,可以存储零值,正负数,以及定长数,对于这个数据类型有个几个概念要搞清,否则容易搞混,下面给出具体描述。
1、可表示范围及存储空间
从1.0 x
10-130 到 1.0 x 10126(不包括),如果表达式或值大于1.0
x 10126,Oracle会返回错误信息
所需的存储空间为1到22个字节
2、Number类型表示法
NUMBER(p,s)
P 和S 可选
其中precision表示数字的总长度,scale代表可以有几位小数。
precision也叫精度,是指数中的总数字个数,默认情况下,精度为38
位,取值范围是1~38 之间。
scale是小数位数,即数中小数点右边的数字个数。其范围从-84到127,能够决定舍入规则。如果我们不指定scale的值,默认就为0。
不可以用常量或变量指定NUMBER的长度和精度。NUMBER类型最大的长度是38位。
如果不指定NUMBER类型的最大长度,就会采用默认长度或是使用系统所支持的最大长度。
精度和小数位数不会影响数据在磁盘上如何存储,而只会影响允许有哪些值以及数值如何舍入(round)。
例如,数
123.45 的精度是 5,小数位数是 2。
下面对p和s进行分析
p>0,对s分2种情况分析:
a. s>0
精确到小数点右边s位,并四舍五入。然后检验有效数位是否<=p;如果s>p,小数点右边至少有s-p个0填充。
b. s<0
精确到小数点左边s位,并四舍五入。然后检验有效数位是否<=p+|s|
(有效数位:从左边第一个不为0的数算起)
对于浮点数则不考虑精度问题
c、表示整数
当s的值被省略时,即等同于s等于0,表示整数
NUMBER(p)
等同于NUMBER(p,0)
c、浮点型
当p和s都被省略,则当前可表示的数据为浮点型,可以存储正负数、零值、浮点数等
示例:
Value
Datatype
Stored Value
123.2564
NUMBER
123.2564
1234.9876
NUMBER(6,2)
1234.99
12345.12345
NUMBER(6,2)
Error
1234.9876
NUMBER(6)
1235
12345.345
NUMBER(5,-2)
12300
1234567
NUMBER(5,-2)
1234600
12345678
NUMBER(5,-2)
Error
123456789
NUMBER(5,-4)
123460000