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’

 

 

 

 

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