梁敬彬梁敬弘兄弟出品
NUMBER[(精度 [, 标度])]
NUMBER数据类型用于存储零、正负定点数。其中:精度是一个无符号整数,定义了总的数字数,精度范围是1至38。标度定义了小数点右边的数字位数。一个数的标度不应大于其精度,如果实际标度大于指定标度,那么超出标度的位数将会四舍五入省去
精度与标度
比如
NUMBER(4,1)定义了小数点前面3位和小数点后面1位,共4位的数字,范围在-999.9
到999.9。所有NUMERIC数据类型,如果其值超过精度, 系统会返回一个出错信息,如果超过标度,则多余的位会被截断。如果不指定精度和标度, 缺省精度为38。
SQL> create table t_c( id int,value number(2,2));
操作已执行
已用时间: 1.775(毫秒). 执行号:396.
SQL> insert into t_c(id,value) values (1, 8.88) ;
insert into t_c(id,value) values (1, 8.88) ;
[-6170]:列[VALUE]精度超出定义.
已用时间: 0.303(毫秒). 执行号:0.
SQL> insert into t_c (id ,value) values (2, 0.88) ;
影响行数 1
已用时间: 0.426(毫秒). 执行号:398.
SQL> insert into t_c (id ,value) values (3, 0.888) ;
影响行数 1
已用时间: 1.101(毫秒). 执行号:399.
SQL> select * from t_c;
行号 ID VALUE
---------- ----------- -----
1 2 0.88
2 3 0.89
我自己总结的人话,如下:
规律: number(a,b)
b是小数位,a是表示整数位+小数位不能超过的和,可以等于。
另外整数位留下的机会是a-b得到的机会。
比如number(2,2), 表示留给整数位的机会已经没有了(2-2=0)。类似0.8 0.88这类的
比如number(4,2), 表示留给整数位的有1位或者2位的机会(4-2=2)。类似8.8 88.8 88.88 这类。
比如number(4,3), 表示留给整数位的只有1位的机会(4-3=1)。类似8.8 8.88 8.888这类
另外从这个规律来看,NUMBER[(精度 [, 标度])] 精度小于标度,也是不可能的:)
国内一线知名数据库专家、畅销书《收获,不止Oracle》作者梁敬彬老师,做客【达梦会客厅】
公众号:收获不止数据库