oracle中number数值类型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle中number数值类型相关的知识,希望对你有一定的参考价值。

123.89 NUMBER(4,2) exceeds precision (有效位为5, 5 > 4),而 123.89 NUMBER(3) 显示124 第二个不会损失
第二个不会损失精度吗?

参考技术A 默认是保留小数点后面0位 , 所以123.89 按四舍五入计算得到 124 参考技术B number(p,q)表示p位数,q位小数, 所以123.89最少应该是 number(5,2) 参考技术C 带精度用decimal(10,2) 参考技术D asd sad as das das

oracle数据库数值类型

---恢复内容开始---

内容摘自网络 

Oracle的数值类型有int,number,float,decimal,numberic等。

NUMBER类型

 

定义

 

定义格式NUMBER (precision,scale)

precision表示数字中的有效位(从左边第一个不为0的数算起,小数点和负号不计入有效位数),取值范围为【1-38】默认38。

scale表示精确到多少位,取值范围为【-84-127】,默认值为0。大于零时,表示数字精确到小数点右边的位数;小于零时,将把该数字取舍到小数点左边的指定位数,所以,NUMBER整数部分允许的长度为(precision- scale),无论scale是正数还是负数,并且,如果precision小于scale,表示存储的是没有整数的小数。

关于number的精度(p)和刻度(s)遵循以下规则:

1)  当一个数的整数部分的长度> p-s 时,Oracle就会报错

2)  当一个数的小数部分的长度> s 时,Oracle就会舍入。

3)  当s(scale)为负数时,Oracle就对小数点左边的s个数字进行舍入。

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

 

案例

 

 

实际值

数据类型

存储值

1234567.89

Number

1234567.89

1234567.89

Number(8)

1234567

1234567.89

Number(6)

出错

1234567.89

Number(9,1)

1234567.9

1234567.89

Number(9,3)

出错

1234567.89

Number(7,2)

出错

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)

出错

 

 

 

NUMBER类型的子类

 

decimal,numeric,int等都为SQL、DB2等数据库的数据类型,ORACLE为了兼容才将其引入;但实际上在ORACLE内部还是以NUMBER的形式将其存入,所以在集合关系上它们也都是number的子集。

int类型只能存储整数;

在oracle数据库建表的时候,decimal,numeric不带精度,oracle会自动把它处理成INTEGER;带精度,oracle会自动把它处理成number。

Oracle只用NUMBER(m,n)就可以表示任何复杂的数值数据。

---恢复内容结束---

以上是关于oracle中number数值类型的主要内容,如果未能解决你的问题,请参考以下文章

oracle数据库中Number是啥类型?

oracle中的number类型对应mysql里面啥类型啊

Oracle字符类型与数值类型的转换

oracle中number类型 默认长度是多少

oracle数据库中的number数据类型疑问

oracle数据库中“Number”是啥类型?