在开发中经常会去进行一些计算,遇到除法经常会遇到除不尽的情况,当然各个公司要求不同,处理方式不一样,所要求精度也不一样。整理下oracle自带保留两位小数常用函数:
1 ROUND( number, [ decimal_plaes ] )
ROUND()
函数是四舍五入的方法,即传回一个数值,该数值是按照指定的小数位元数进行四舍五入运算的结果。number 用于指定取整精度的数字;decimal_plaes 需要保留的小数位数,默认值为 0。
使用:SELECT ROUND( number, [ decimal_places ] ) FROM TABLE_NAME;
注意:
1. 第一个参数必须是number,且必填;
2. 参数 decimal_places 是指在进行四舍五入运算时 , 小数的应取的位数,该参数可以不填,不填的时候,系统默认小数位数取0;
3. ROUND()
函数并不会占位,小数为零则清空(有时为了数据展示的统一性,需要小数位为两位,则单此函数无法满足);
4. ROUND( number, [ decimal_places ] ),第一个参数可以为表达式。例如: select round(123.0120/1,4) num1 from dual。
2 TRUNC
( number, [ decimal_plaes ] )
TRUNC
( number, [ decimal_plaes ] )不会将number进行四舍五入;number用于指定取整精度的数字;decimal_plaes 需要保留的小数位数,默认值为 0。
使用:SELECT TRUNC
( number, [ decimal_places ] ) FROM TABLE_NAME;
注意:
1. 第一个参数必须是number,且必填;
2. 参数 decimal_places 是指在进行四舍五入运算时 , 小数的应取的位数,该参数可以不填,不填的时候,系统默认小数位数取0;
3. TRUNC()
函数并不会占位,小数为零则清空(有时为了数据展示的统一性,需要小数位为两位,则单此函数无法满足);
4. TRUNC
( number, [ decimal_places ] ),第一个参数可以为表达式。例如: select TRUNC
(123.0120/1,4) num1 from dual;
5.trunc()函数也可以对日期进行操作。(摘录这篇博客: Oracle trunc()函数的用法)
select trunc(sysdate) from dual --2013-01-06 今天的日期为2013-01-06
select trunc(sysdate, 'mm') from dual --2013-01-01 返回当月第一天.
select trunc(sysdate,'yy') from dual --2013-01-01 返回当年第一天
select trunc(sysdate,'dd') from dual --2013-01-06 返回当前年月日
select trunc(sysdate,'yyyy') from dual --2013-01-01 返回当年第一天
select trunc(sysdate,'d') from dual --2013-01-06 (星期天)返回当前星期的第一天
select trunc(sysdate, 'hh') from dual --2013-01-06 17:00:00 当前时间为17:35
select trunc(sysdate, 'mi') from dual --2013-01-06 17:35:00 TRUNC()函数没有秒的精确
3 TO_CHAR
( number, ‘格式’ )
TO_CHAR()是一个格式化函数,可以对数值进行四舍五入操作,并指定返回格式。number用于指定取整精度的数字;第二个参数是指定格式化的格式。
使用:select to_char(参数,'FM990.00') from TABLE_NAME
注意:
1. 第一个参数必须是number,且必填;
2. 第二个参数不填的时候,系统默认取当前数值;
3. to_char()
函数会进行占位,不过占位是通过‘0’,‘9’进行。
- 0表示:如果参数(double或者float类型)存在数字就显示数字,不存在数字就显示0
- 9表示:如果参数(double或者float类型)存在数字就显示数字,不存在数字就显示空格
- FM表示:将9带来的空格删除
如下事例:
num1:如果只有一个参数,则默认为当前值;
num2:如果没有FM,则会根据格式,将99转化为“ ”(空格);
num3:被格式化数字小数位值为.000,格式化取格式类型末尾为9,则取最后一个零所在位;
num4:被格式化数字小数位值为.000,格式化取格式类型末尾为0,则取补充被格式化数字为末尾0所在位数;
num5:和num3相似,格式类型小数位为9,格式类型小数位没有0,则取格式化数字后不为零小数位;
num6:特殊说明,格式类型小数位为9,被格式化话数字格式化后值小数位没有非0数值,则不会展示小数位(需要注意此种情况);
num7:与num6相似,整数依旧如此,需要注意;
num8:格式化类型个位格式类型为0,则可避免num7出现情况;
num9:与num4相似,整数位最高位格式类型为0,则被格式化数字需要补充位数至格式类型0所在最高位。
如果保留两位小数则小数点后写两个99,这里的数字9代表的数字,也是一个占位符,表示该位置上以后会是一个数字,为什么小数点前面会是一个0,而不是9,是因为如果计算结果小于1,那么只会显示小数点和小数点之后的部分,前面的0会忽略掉
4. 格式化字符必须长度必须大于被格式化字符长度,否则会输出“######”。
select TO_CHAR(123.0160) num1,
TO_CHAR(123.0160,'999999990.00') num2,
TO_CHAR(123.1000,'FM999999990.0099') num3,
TO_CHAR(123.1000,'FM999999990.09900') num4,
TO_CHAR(123.1000,'FM999999990.99') num5,
TO_CHAR(123.0000,'FM999999990.99') num6,
TO_CHAR(000.1000,'FM999999999.99') num7,
TO_CHAR(000.1000,'FM999999990.990') num8,
TO_CHAR(123.0160,'FM0999999990.990') num9
from dual;
select TO_CHAR(012345678910.00/1,'FM0999999990.990')numb from dual;
5. TO_CHAR() 函数也可对日期进行格式化;
select to_char(sysdate,’yyyy-MM-dd HH24:mi:ss’) from dual;//mi是分钟
select to_char(sysdate,’yyyy-MM-dd HH24:mm:ss’) from dual;//mm会显示月份
6. TO_CHAR()其他格式化类型。摘录:Oracle中关于to_date(),to_char(),to_number()函数的用法
to_char(-0.1,’99.99’) ’ -.10’
to_char(-0.1,’FM9.99’) ‘-.1’
to_char(0.1,’0.9’) ’ 0.1’
to_char(12,’9990999.9’) ’ 0012.0’
to_char(12,’FM9990999.9’) ‘0012’
to_char(485,’999’) ’ 485’
to_char(-485,’999’) ‘-485’
to_char(485,’9 9 9’) ’ 4 8 5’
to_char(1485,’9,999’) ’ 1,485’
to_char(1485,’9G999’) ’ 1 485’
to_char(148.5,’999.999’) ’ 148.500’
to_char(148.5,’999D999’) ’ 148,500’
to_char(3148.5,’9G999D999’) ’ 3 148,500’
to_char(-485,’999S’) ‘485-’
to_char(-485,’999MI’) ‘485-’
to_char(485,’999MI’) ‘485’
to_char(485,’PL999’) ‘+485’
to_char(485,’SG999’) ‘+485’
to_char(-485,’SG999’) ‘-485’
to_char(-485,’9SG99’) ‘4-85’
to_char(-485,’999PR’) ‘<485>’
to_char(485,’L999’) ‘DM 485
to_char(485,’RN’) ’ CDLXXXV’
to_char(485,’FMRN’) ‘CDLXXXV’
to_char(5.2,’FMRN’) V
to_char(482,’999th’) ’ 482nd’
to_char(485, ‘“Good number:”999’) ‘Good number: 485’
to_char(485.8,‘“Pre-decimal:”999” Post-decimal:” .999’) ‘Pre-decimal: 485 Post-decimal: .800’
to_char(12,’99V999’) ’ 12000’
to_char(12.4,’99V999’) ’ 12400’
to_char(12.45, ‘99V9’) ’ 125’