number(<p>,<s>)
精度p取值范围1~38
有效位s取值范围-84~127
最高整数位数=p-s
s正数,小数点右边指定位置开始四舍五入
s负数,小数点左边指定位置开始四舍五入
s是0或者未指定,四舍五入到最近整数
当p小于s时候,表示数字是绝对值小于1的数字,且从小数点右边开始的前s-p 位必须是0,保留s位小数。
–num_test start————————————————
connected to oracle9i enterprise edition release 9.0.1.1.1
connected as aspire
sql>
sql> set linesize 1000;
sql> create table hjm_num_test
2 (a number,
3 b number(5,2),
4 c number(5,-2),
5 d number(5,0),
6 e number(5),
7 f number(2,5));
table created
sql> insert into hjm_num_test
2 (a,b,c,d,e,f) values(123.3333,123.3333,123.3333,123.3333,123.3333,-0.0003);
1 row inserted
sql> insert into hjm_num_test
2 (a,b,c,d,e,f) values(197.9333,197.9333,197.9333,197.9333,197.9333,0.00012567);
1 row inserted
sql> commit;
commit complete
sql> select * from hjm_num_test;
a | b | c | d | e | f | |
1 | 123.3333 | 123.33 | 100 | 123 | 123 | -0.00030 |
2 | 197.9333 | 197.93 | 200 | 198 | 198 | 0.00013 |
(在pl/sql dev sql窗口显示)
–num_test end——————————————————–
似乎结果很正确,可是现在出来一个问题,当我不在pl/sql dev窗口运行,我在isqlplus中运行,结果就有点不一样了,注意,第1行的f列:
a | b | c | d | e | f |
---|---|---|---|---|---|
123.3333 | 123.33 | 100 | 123 | 123 | -.0003 |
197.9333 | 197.93 | 200 | 198 | 198 | .00013 |
(在isqlplus中显示)
它舍去了末尾的0!在sqlplus下测试也是同样的效果。
不过本人的意向应该是还是保留那个0的,因为number(2,5)它毕竟指定了有效位是5位。