在oracle中number类型的字段长度是啥意思

Posted

tags:

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

oracle中的number类型

number (precision,scale)

a)    precision表示数字中的有效位,如果没有指定precision的话,oracle将使用38作为精度;

b)    如果scale大于零,表示数字精度到小数点右边的位数;scale默认设置为0;如果scale小于零,oracle将把该数字取舍到小数点左边的指定位数。

c)    Precision 的取值范围是[1-38];scale的取值范围是[-84-127].

d)    Number整数部分允许的长度为(precision –scale),无论scale是正数还是负数。

e)    如果precision小于scale,表示存储的是没有正数的小数。

f)     Precision表示有效位数,有效数位:从左边第一个不为0的数算起,小数点和负号不计入有效位数;scale表示精确到多少位,指精确到小数点左边还是右边多少位(由+-决定)。

g)    Number值类型举例:

a)    关于precision,scale也可以做如下表述:

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

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

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

3) 当s(scale)为负数时,oracle就会对小数点左边的s进行舍入;

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

Number类型的子类:

a)    Oracle本来就没有int类型,为了与别的数据库兼容,新增了Int类型作为number类型的子集;

b)    Int类型只能存储整数,number可以存储浮点数,也可以存整数。

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

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

Decimal,numeric,int等都为sql,db2等数据库的数据类型,Oracle为了兼容才将其引入;但实际上在oracle内部还是以number的形式将其存入的。

参考技术A

它是指在number默认情况下,精度为38位,取值范围1~38之间; 

它实际上是磁盘上的一个变长类型,会占用0~22 字节的存储空间;

默认小数点位是0。

number数据类型

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

1.p

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

2.s

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

number类型的p和s,与其底层存储完全没有关系,根本不会影响数据在磁盘上如何存储,它只会影响允许哪些值以及数值如何舍入,你可以认为其是对数据的“编辑”。

简单的说,精度位p表示数值最多能有多少个有效数字,而小数位s表示最多能有多少位小数。换句话说,p表示一共有多少位有效数字(即小数点左边最多有p-s位有效数字),s表示小数点右边有s位有效数字。

Oracle NUMBER 数据类型中的精度和小数位数是啥意思

【中文标题】Oracle NUMBER 数据类型中的精度和小数位数是啥意思【英文标题】:What does precision and scale means in the Oracle NUMBER data typeOracle NUMBER 数据类型中的精度和小数位数是什么意思 【发布时间】:2012-05-26 13:31:59 【问题描述】:

我一直在阅读 Oracle DB 初学者指南。精度和规模的定义相当混乱。 书上说:

number(6,3) 

Oracle allows for 2 not 6 significant digitalis.

我的问题是,6 表示精度。这意味着有效数字的数量。所以它应该接受 6 位有效数字。为什么书上说是2位有效数字

我指的书是Oracle Database 11g A Beginner's Guide by McGraw Hill Professional, Dec 18, 2008,第12页

【问题讨论】:

【参考方案1】:

查看在线Oracledoc:

p 是精度,或最大有效小数位数 数字,其中最重要的数字是最左边的非零 位,最低有效位是最右边的已知数字。 Oracle 保证数字的可移植性,精度高达 20 个 base-100 数字,相当于 39 或 40 个十进制数字 取决于小数点的位置。

s 是小数位数,或从小数点到小数点的位数 最低有效位。范围可以从 -84 到 127。

正数是右边的有效位数 小数点到并包括最低有效数字。

负数是左边的有效位数 小数点,但不包括最低有效位。为了 负刻度最低有效位在左侧 小数点,因为实际数据是四舍五入到指定的 小数点左边的位数。例如,一个 (10,-2​​) 的规格意味着四舍五入到数百。

【讨论】:

以上是关于在oracle中number类型的字段长度是啥意思的主要内容,如果未能解决你的问题,请参考以下文章

oracle数据库中NUMBER(2)这个2是啥意思

Oracle NUMBER 数据类型中的精度和小数位数是啥意思

Oracle数据库中number的字段类型长度能不能修改

oracle数据库中Number是啥类型?

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

oracle 某个表的字段里面的值是<clob>是啥意思