oracle的number数据类型

来源:互联网 发布:南京行知中学地址 编辑:程序博客网 时间:2024/06/05 22:33

number类型的语法很简单:number(p,s):

p:精度位,precision,是总有效数据位数,取值范围是38,默认是38,可以用字符*表示38。

s:小数位,scale,是小数点右边的位数,取值范围是-84~127,默认值取决于p,如果没有指定p,那么s是最大范围,如果指定了p,那么s=0。

最高整数位数=p-s
s正数,小数点右边指定位置开始四舍五入
s负数,小数点左边指定位置开始四舍五入
s是0或者未指定,四舍五入到最近整数
当p小于s时候,表示数字是绝对值小于1的数字,且从小数点右边开始的前s-p位必须是0,保留s位小数。



注:value是输入数据,NUMBER(x,y)是数据类型,stroed value是在数据库中实际储存的值

p>0,s可以细分四种:

1. s = 0:

               此时strod value值就是value整数部分。而且value的整数位不能大于p

               例如:value = 1234.345 ,NUMBER(5)  ,stored value=1234

                           value = 123456 , NUMBER(5), stroed value = error

 

2. s > 0 && s < p:

              此时stroed vlue整数部分就是value的整数部分,stroed value 的小数部分是vaule小数向右s位。而且value的整数位不能大于p

              例如:value = 1234.354 , NUMBER(5,2) , stroed value = 1234.35

                          value = 1234.3, NUMBER(5,2) , stroed value = 1234.3

                          value = 125234.34, NUMBER(5,2) , stroed value = error


3. s > 0 && s > p :

            此时 stroed value < 0,且小数点后面有效数字位数最大为p,小数位数最大为s         

            例如:value = 0.00123 , NUMBER(2,4) , stroed value = 0.0012

                        value = 0.003 , NUMBER(2,4) , stroed value = 0.003      

                        value = 0.0425 , NUMBER(2,4) , stroed value = eror    

4. s < 0:

             此时 stroed value >= 0,且整数部分有效数字位最大为p。如果value <  |s| * 10 ,那么stroed value = 0 ;如果value > |s| * 10 ,那么stroed value> |s| * 10

              例如:value = 12 , NUMBER(4,-2) , stroed value = 0

                         value = 122 , NUMBER(4,-2) , stroed value = 100

                         value = 123456 , NUMBER(4,-2) , stroed value =123400

                         value = 1234567 , NUMBER(4,-2) , stroed value = error



下面是一个参考表:

value

DateType

stroed value

1234567.89

Number

1234567.89

1234567.89

Number(8)

1234567

1234567.89

Number(6)

error

1234567.89

Number(9,1)

1234567.9

1234567.89

Number(9,3)

error

1234567.89

Number(7,2)

error

1234567.89

Number(5,-2)

1234600

1234511.89

Number(5,-2)

1234500

1234567.89

Number(5,-4)

1230000

1234567.89

Number(*,1)

1234567.9

0.012

Number(2,3)

0.012

0.23

Number(2,3)

error




如果想自己在oracle中验证,可以建一个如下面图片一样的table进行验证:



0 0