oracle的number数据类型

本文详细解析了NUMBER(p,s)类型的使用规则,包括精度位(p)和小数位(s)的定义及影响,阐述了不同场景下数值存储的具体变化,并通过实例表格帮助理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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进行验证:

 github上有我更多的笔记:Raray-chuan (兮川) · GitHub,欢迎stars与following,如果有问题可以在issue中向我咨询

关注我的公众号,获取更多关于后端、大数据的知识

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值