zoukankan      html  css  js  c++  java
  • oracle的number数据类型

    Number类型是oralce的数值类型,存储的数值的精度可以达到38位。Number是一种变长类型,长度为0-22字节。取值范围为:10^(-130) —— 10^126(不包括)。以十进制格式进行存储的,它便于存储,但是在计算上,系统会自动的将它转换成为二进制进行运算的。

     

    Number(p,s)

    Ps都是可选的。

    P指精度(precision),即总位数。默认情况下精度为38。精度的取值范围为1~38

    S指小数位(scale),小数点右边的位数。小数点位数的合法值为-84~127。小数位的默认值由精度来决定。如果没有指定精度,小数位默认为最大的取值区间。如果指定了精度,没有指定小数位。小数位默认为0(即没有小数位)

    精度和小数位不会影响数据如何存储,只会影响允许哪些数值及数值如何舍入。

     

    存储格式:

    数字类型内部存储是一个字节的变长阿拉伯数字数组。

    数字类型有以下格式:

    < [length]>sign bit/exponentdigit1digit2...digit20

    0           digit1                 21

    指数字节

    数值

    数值

    数值

    0个字节

    为符号和指数字节(sign bit/exponent ),由三部分构成:

    (1)符号位:是整个字节的最高位(128)

      如果是0,则数字是负数

      如果是1,则数字是正数或者0

    (2)偏移量:总是65

    (3)指数:

      范围为-6562

      标示该数字100为基础的科学记数法

     

    对于第0个字节的值,则有:正数>128;负数<128;零=128

    ZV=0个字节的值,指数值为E则有:

    ZV=200E=200-128-65=7

    如果第一个字节大于128,那么数字是正的:

    E=ZV- 128 -65=ZV-193

    如果第一个字节小于128,那么数字是负的:

    E=(255-ZV)-128-65=62-ZV

     

    数值字节(Digits)

    大部分数字的最高位是digit1

    使用100作为基数(每一个数字是0-99之间)

    对于正数:

      实际值=存储值-1

    对于负数:

      实际值=101-存储值

      标志102位于最后

    例:

    11.11的存储格式为:

    1931212

    193>128,为正数,指数E011(实际值)=12(存储值)1

     

    -11.11的存储格式为:

    629090102

    62<128,为负数,指数E=011(实际值)101-90(存储值)

    因为数字是基于100的,因此最大的数字是99.指数从-6562,因此,oraclenumber的范围为:1*100(-65)=1*10^(-130)99*100(62)+99*100(61)……无限接近1*10^(126)

     

    正数的解读

    数字为正数,第一个字节必须大于128(0x80)

    第一步:指数= ZV(0个字节的值)-193

    第二步:每一个其他的数字都减1

    第三步:从基于100的指数转换到基于10的指数

           每一个结果通过100^(EXP-N)其中

           EXP是第一步中得到的指数

           N是数字的位置的顺序号(最高位的N=0)

    第四步:将所有的值相加

    例:1234.12的存储:194133513

    求值过程:

    194>128,正数,E1

    实际值1234.12(13-1)*100^1+(35-34)^0+(13-1)^(-1)

     

    负数的解读

    数字为负数,第一个字节必须小于128(0x80)

    第一步:指数=62-ZV(0个字节的值)

    第二步:每一个数字被101

    第三步:将基数从100转换为10

           每一个数字乘以100^(EXP-N)这里

           EXP是第一步中的指数值

           N是数字位置顺序值(最高位为0)

    第四部:确认尾巴上的102已经抛弃

    第五步:将所有的值相加

    如果数字标示超过21字节,则最后的102不被要求,oracle不会使用22字节来标示的。Oracle将自己会考虑所有的字节。

    例:-1234.12的存储格式:61896789102

    求值过程:

    61<128,负数,E62-61=1

    实际值-1234.12-(  (101-89)*100^1+(101-67)*100^0+(101-89)*100^(-1)  )

  • 相关阅读:
    Mac下启动Apache
    Mac OS X中配置Apache
    catransition type
    Block
    mysql 复制表结构和表数据的区别 like 和 select
    mysql kill掉所有的锁表的进程 未验证
    MySQL所有函数及操作符
    linux各种复制命令
    Mac mysql 导入导出数据库
    数据库总结
  • 原文地址:https://www.cnblogs.com/hustcat/p/1493529.html
Copyright © 2011-2022 走看看