Oracle数据库存储number类型数据
转载⾃初⼀七⽉
oracle的number类型是oracle的内置类型之⼀,是oracle的最基础数值数据类型。在9iR2及其以前的版本中只⽀持⼀种适合存储数值数据的固有数据类型,在10g以后,才出现了两种新的数值类型,即推出本地浮点数据类型(Native Floating-Point Data Types):
BINARY_FLOAT(单精度32位)和BINARY_DOUBLE(双精度64位). 这些新数据类型都是基于IEEE⼆进制浮点运算标准,ANSI/IEEE Std 754-1985 [IEEE 754],使⽤这些类型时要加上⽂字f(BINARY_FLOAT)或者d(BINARY_DOUBLE),⽐如2.07f、3.000094d。
number数据类型
number类型的语法很简单:number(p,s):
p:精度位,precision,是总有效数据位数,取值范围是38,默认是38,可以⽤字符*表⽰38。
s:⼩数位,scale,是⼩数点右边的位数,取值范围是-84~127,默认值取决于p,如果没有指定p,那么s是最⼤范围,如果指定了p,那么s=0。
p:is the precision,or the total number of digits. Oracle guarantees the portability of numbers with precision ranging from 1 to 38.
s:is the scale, or the number of digits to the right of the decimal point. The scale can range from -84 to 127.
number类型的p和s,与其底层存储完全没有关系,根本不会影响数据在磁盘上如何存储,它只会影响允许哪些值以及数值如何舍⼊,你可以认为其是对数据的“编辑”。简单的说,精度位p表⽰数值最多能有多少个有效数字,⽽⼩数位s表⽰最多能有多少位⼩数。换句话说,p 表⽰⼀共有多少位有效数字(即⼩数点左边最多有p-s位有效数字),s表⽰⼩数点右边有s位有效数字。如number(5,2)类型的数据,就表⽰⼩数点左边最多有3位有效数字,右边最多有2位有效数字,加起来就是最多有5位有效数字,超过这个范围的数字就不能正确的存储下来,注意这⾥说的是不能正确存储,但并不是不能存储。
最⾼整数位数=p-s
s正数,⼩数点右边指定位置开始四舍五⼊
s负数,⼩数点左边指定位置开始四舍五⼊
s是0或者未指定,四舍五⼊到最近整数
当p⼩于s时候,表⽰数字是绝对值⼩于1的数字,且从⼩数点右边开始的前s-p位必须是0,保留s位⼩数。
p>0,对s分2种情况:
1. s>0
精确到⼩数点右边s位,并四舍五⼊。然后检验有效数位是否<=p;如果s>p,⼩数点右边⾄少有s-p个0填充。oracle decimal类型
2. s<0
精确到⼩数点左边s位,并四舍五⼊。然后检验有效数位是否<=p+|s|
具体数据可参考下表
⾥⾯发⽣错误的⾏有的是因为源数据超过了可以表⽰的范围,有的是因为进⾏⼩数四舍五⼊后超过了可以表⽰的范围。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。