1
、
number(p,s)
整数位 <=p-s, 精确到小数点后 s 位,并四舍五入。
若 s 为负数,则精确到小数点前 s 位,并四舍五入。
整数位 <=p-s, 精确到小数点后 s 位,并四舍五入。
若 s 为负数,则精确到小数点前 s 位,并四舍五入。
2
、如果
p=0,
比如
number(10)
此时插入数值
0.5
,
小数点后一位四舍五入
,
实际存储值为
1
,
请大家注意
3.
这里
p
是精度
, s
是刻毒范围
精度是数值中所有数字位的个数 , 而刻度范围是小数点右边的数字的个数
精度是数值中所有数字位的个数 , 而刻度范围是小数点右边的数字的个数
4、Connected to Oracle9i Enterprise Edition Release 9.2.0.1.0
Connected as wzhu
SQL> create table tb_test(id number(5,2));
Table created
SQL> insert into tb_test values(234.45);
1 row inserted
SQL> insert into tb_test values(1234.5);
insert into tb_test values(1234.5)
ORA-01438: value larger than specified precision allows for this column
/*ERROR
位于第
1
行
:
ORA-01438: 值大于此列指定的允许精确度 */
ORA-01438: 值大于此列指定的允许精确度 */
4.1
、
number(5,2)
表未小数点右边保留
2
位
,
小数点左边是
5-2=3
位
1234 是小数点左边有 4 位 , 所以报错了 .
1234 是小数点左边有 4 位 , 所以报错了 .
4.2
、
number(5,2)
对
1234.5
来说就是右边保留两位小数,应该就是
1234.50
了,有效位数是
6
,大于
5
,所以报错
5. 精确到小数点右边s位,并四舍五入。然后检验有效数位是否<=p;如果s>p,小数点右边至少有s-p个0填充。
对如果s>p,小数点右边至少有s-p个0填充。我还是没有理解,
例如:number(4,6),是s>p把,但是就是说保留六位小数,不够就会在右边补0,这样总长度就一定会超过4了报错啊?
对如果s>p,小数点右边至少有s-p个0填充。我还是没有理解,
例如:number(4,6),是s>p把,但是就是说保留六位小数,不够就会在右边补0,这样总长度就一定会超过4了报错啊?
5.1、declare
v_number number(4,7);
begin
v_number :=123.45;
dbms_output.put_line(v_number);
exception
when others then
dbms_output.put_line(sqlerrm);
end;
这是我的测试代码,都是报错
ORA-06502: PL/SQL: numeric or value error: number precision too large
v_number number(4,7);
begin
v_number :=123.45;
dbms_output.put_line(v_number);
exception
when others then
dbms_output.put_line(sqlerrm);
end;
这是我的测试代码,都是报错
ORA-06502: PL/SQL: numeric or value error: number precision too large
5.2、declare
v_number number(4,2);
begin
v_number:=123;
dbms_output.put_line(v_number);
exception
when others then
dbms_output.put_line(sqlerrm);
end;
Output: ORA-06502: PL/SQL: numeric or value error: number precision too large
5.3 declare
v_number number(4,2);
begin
v_number:=12;
dbms_output.put_line(v_number);
exception
when others then
dbms_output.put_line(sqlerrm);
end;
output:
12
由5.2 和 5.3 比较可以看出,
number(p,s) 的结构是这样,P 为number 的总位数,S包含于P,属于小数点后面精确位数,即5.2 的输出形式为:
123.00 ,一共为
5位,超出了所定义的决位数
number(4,2) 中的
4,故报错; 5.3 的输入应为:
12
:
00 没有超出,所以正常.