oracle 数据保留两位小数(祥解ROUND()TRUNC(),TO_CHAR( number, ‘格式’ )函数)

在开发中经常会去进行一些计算,遇到除法经常会遇到除不尽的情况,当然各个公司要求不同,处理方式不一样,所要求精度也不一样。整理下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。

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() 函数也可对日期进行格式化;

oracle字符串类型的时间常用操作

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’

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章