number数据类型
格式:number( precision , scale )
直接使用number的话,将使用40位精度
直接使用number(数字),只能用于整数
precision表示数字中的有效位;
有效数位:从左边第一个不为0的数算起,小数点和负号不计入有效位数;
scale表示精确到多少位,指精确到小数点左边或右边多少位(±决定)
如果scale大于零,表示数字精确到小数点右边的位数; scale默认设置为0;
precision的取值范围为[1—38];Scale的取值范围为[-84—127].
如果scale小于零, Oracle将把该数字取舍到小数点左边的指定位数。
number整数部分允许的长度为(precision- scale),无论scale是正数还是负数.
如果precision小于等于scale,表示存储的是没有整数的小数.
举例说明:
实际值 | 数据类型 | 存储值 |
---|---|---|
1234567.89 | umber | 1234567.89 |
1234567.89 | number(8) | 1234567 |
只取整数部分,小数部分不看,不能大于规定的长度8
1234567.89 | number(9,1) | 1234567.9 |
---|
9-1=8整数长度(不能超过),小数只要1位,小数点往右移,遵循四舍五入.
1234567.89 | number(5,-2) | 1234600 |
---|
小数位为负数-2,说明小数点往左移;而且5-(-2)=7整数长度
0.1 | number(2,2) | 0.10 |
---|
有效位和小数位相等,2-2=0整数长度,说明是小数,小数位2说明保留两位小数,遵循四舍五入
0.1 | number(2,3) | 0.10 |
---|
2-3=-1整数长度,说明0.0开始的小数存储,保留三位小数
小结:
1.使用number时,直接使用,但是不推荐使用
2.使用number(整数位数),只能存储整数,注意不能超过整数位数
3.使用number(precision , scale)
precision表示有效位数,scale表示小数位数
整数长度:precision-scale
如果precision>scale时,说明存储的是一个正数
先找出整数长度,然后剩下的就是小数位数
如果scale>0,说明小数点往右移动,遵循四舍五入
如果scale<0,说明小数点往左移动,移动一位,该位上的数为0
如果precison<=scale,说明存储的是一个小数
就不用整数长度了,因为都小数了,找的也是<=0了
scale就表示保留的小数位数,遵循四舍五入
precision的取值范围为[1 , 38] ; Scale的取值范围为[-84 , 127]
这个precision的取值从1开始保证了它的取值一定是介于整数或者小数