oracle数据库和其他库存储Number类型数据有比较大的区别。例如Mysql,有点类似于程序语言,会有明确的区分,如int,float等。Oracle的Number就一种存储格式,float也没有采用IEEE标准(所以也没有谁说Oracle有浮点数精度问题)。Oracle是采用了类似于按位拆分,将10进制数字拆分为两个一组,存到一个字节中,一个字节最大128嘛,存个两位数还是足够的。整数和小数分开存储,再加上一些长度位,标识位,符号位,就OK了。
理了一个示意图,便于理解
注意: 二进制位那一行的数字仅示例表示位的下标索引,无实际意义
下面举几个例子
正整数 如: 123
从右向左拆分,两个一组 可拆成两组 1和23 那么存两位字节的整数,分别是 02 和24(都加1,可能是因为 不加1会出现0,0在二进制中一般表示结束符);
标识位就是 0xC0+2(整数长度) 即0xC2 = 194
无小数部分,正数省略符号位
那么长度位就是 3 (标识位+整数部分)
(注意,长度位有大小端