梁敬彬梁敬弘兄弟出品

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》作者梁敬彬老师,做客【达梦会客厅】

达梦数据库知识总结链接贴

公众号:收获不止数据库

系列回顾
“大白话人工智能” 系列
“数据库拍案惊奇” 系列
“世事洞明皆学问” 系列

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐