Oracle中NUMBER类型问题

  • Post author:
  • Post category:其他




From




baidu


在Oracle中Number


类型可以用来



存储


0







正负定点



或者



浮点数



,可表示的数据范围在



1.0 * 10(-130) —— 9.9…9 * 10(125) {38个9后边带88个


0}

的数字,当Oracle中的数学表达式的值>=1.0*10(126)时,Oracle就会报错。



Number的数据声明如下:



表示



作用



说明



Number(p,s)



声明一个定点数



p(precision)


为精度









s(scale)


表示小数点右边的数字个数




,精度最大值为


38





scale


的取值范围为


-84





127



Number(p)



声明一个整数



相当于


Number(p, 0)



Number



声明一个浮点数



其精度为


38


,要注意的是


scale


的值没有应用,也就是说


scale


的指不能简单的理解为


0


,或者其他的数。




定点数的精度(p)和刻度(s)遵循以下规则:



当一个数的整数部分的长度


> p-s






,Oracle就会报错



当一个数的小数部分的长度


> s






,Oracle就会舍入。






s(scale)


为负数时



,Oracle就对小数点左边的s个数字进行舍入。






s > p



时, p表示小数点后第s位向左最多可以有多少位数字,如果大于p则Oracle报错,小数点后s位向右的数字被舍入.




From



http://blog.csdn.net/mr_zhao/archive/2007/06/29/1671605.aspx





2





.NUMBER


类型细讲:



Oracle number datatype


语法:


NUMBER[(precision [,scale])]



简称:


precision –> p






scale




–> s



NUMBER(p, s)



范围:


1 <= p <=38, -84 <= s <=127





保存数据范围:


-1.0e-130 <= number value <1.0e+126






保存在机器内部的范围:


1 ~ 22 bytes



有效位:从左边第一个不为


0


的数算起的位数,小数点不算位,小数点右边也算位






s


的情况:






s > 0







精确到小数点右边


s


位,并四舍五入。


然后检验有效位是否


<= p








s < 0







精确到小数点左边


s


位,并四舍五入。


然后检验有效位是否


<= p + |s|








s = 0







此时


NUMBER


表示整数。


eg:

Actual Data


SpecifiedAs

Stored As

—————————————-

123.89








NUMBER






123.89

123.89








NUMBER(3)




124

123.89








NUMBER(6,2)


123.89

123.89








NUMBER(6,1)


123.9

123.89








NUMBER(4,2)


exceeds precision(


有效位为


5, 5 > 4)

123.89








NUMBER(6,-2)

100

.01234








NUMBER(4,5)


.01234(


有效位为


4)

.00012








NUMBER(4,5)


.00012

.000127






NUMBER(4,5)


.00013

.0000012





NUMBER(2,7)


.0000012

.00000123




NUMBER(2,7)


.0000012

1.2e-4








NUMBER(2,5)


0.00012

1.2e-5








NUMBER(2,5)


0.00001

123.2564





NUMBER







123.2564

1234.9876




NUMBER(6,2)


1234.99


12345.12345


NUMBER(6,2)


Error(



有效位为


5+2 > 6)



1234.9876




NUMBER(6)




1235 (

s



没有表示


s=0


)

12345.345




NUMBER(5,-2)

12300

1234567






NUMBER(5,-2)

1234600


12345678





NUMBER(5,-2)

Error (



有效位为


8 > 7)



123456789




NUMBER(5,-4)

123460000

1234567890



NUMBER(5,-4)

Error (


有效位为


10 > 9)

12345.58





NUMBER(*, 1)

12345.6

0.1










NUMBER(4,5)


Error(0.10000,


有效位为


5 > 4)

0.01234567



NUMBER(4,5)


0.01235

0.09999






NUMBER(4,5)


0.09999