数值函数
1.数值类型number(p,s)
p表示有效位数, p的范围是1~38,默认值为38,p可以使用*来代替;
s表示小数点后的位数,s的范围是-84~127 ,默认值取决于p,如果指定p,s的默认值为0,如果不指定p,s的默认值为127;
number:浮点数,这里的p和s都没有进行指定,不能简单的理解为默认(我在实验number一共准确存储了40个9,当插入41个9的时候,不准确了)
create table temp_001(
a number
);
--插入40个9的整数
insert into temp_001 values(9999999999999999999999999999999999999999);
--插入40个9的小数
insert into temp_001 values(0.9999999999999999999999999999999999999999);
insert into temp_001 values(99999999999999999999.99999999999999999999);
--插入41个9的整数
insert into temp_001 values(99999999999999999999999999999999999999999);
--插入41个9的小数
insert into temp_001 values(0.99999999999999999999999999999999999999999);
insert into temp_001 values(9.9999999999999999999999999999999999999999);
select * from temp_001;
(这里的数据纯属我个人的操作,我并没有找到理论支持)
number(*,s):浮点数
number(p):整数,相当于number(p,0)
number(p,s):
s>0 且 s<=p 时,整数部分的位数为p-s,小数部分的位数为s
s>0 且 s>p时,整数部分为0,小数部分的位数为s位,且小数点右边至少有s-p个0的填充。
s<0时,整数位数为p+|s|,小数点左边s位后用0填充
(这里所说的位数是精确位数,多出来的位数四舍五入)
value | datatype | stored value |
123.2564 | number | 123.2564 |
1234.9876 | number(6,2) | 1234.99 |
12345.12345 | number(6,2) | 12345.12 |
1234.9876 | number(6) | 1235 |
12345.345 | number(5,-2) | 12300 |
1234567 | number(5,-2) | 1234500 |
12345678 | number(5,-2) | Error |
123456789 | number(5,-4) | 123450000 |
1234567890 | number(5,-4) | Error |
12345.58 | number(*,1) | 12345.6 |
0.1 | number(4,5) | Error |
0.01234567 | number(4,5) | 0.01235 |
0.09999 | number(4,5) | 0.09999 |
0.099996 | number(4,5) | Error |
(里面发生错误的行有的是因为元数据超过了可以表示的范围,有的时因为进行了小数四舍五入后超过了可以表示的范围)
参考网址:
http://www.blogjava.net/caojianhua/archive/2011/01/24/343461.html
考虑到数据库的移植和兼容性,oracle还提供了其他的数值类型
numberic(p,s) 相当于number(p,s)
decimal(p,s)或者dec(p,s) 相当于number(p,s)
Integer或者int相当于number(38)
smallint相当于number(38)
float相当于number
double persicision 相当于 number
real 相当于 real
2.数值函数
1)四舍五入函数:round(p,n)
作用:对p1进行四舍五入,n为保留小数点的位数,默认为0
n可不写(默认为0),也可为负数,表示保留到小数点前n位
--对3.14进行四舍五入,保留到整数位
select round(3.14) from dual;
--对3.14159进行四舍五入,保留到小数点后四位
select round(3.14159,4) from dual;
--对314159进行四舍五入,保留到小数点前3位
select round(314159,-3) from dual;
2)取余函数:mod(m,n)
作用:表示m对n进行除法,取余数
--计算100对3的余数
select mod(100,3) from dual;
3)(向上/向下)取整函数:ceil(m)/floor(m)
作用:ceil(m):取大于等于m的最小整数
floor(m):取小于等于m的最大整数
--分别对3.14和-3.14进行向上/向下取整
select ceil(3.14),floor(3.14),ceil(-3.14),floor(-3.14) from dual;