Oracle Round

ROUND( number, [ decimal_places ] )
number : 需處理的數值
decimal_places : 四捨五入 , 小數取幾位 ( 預設爲 0 )

SELECT ROUND (123.456) FROM DUAL;  -- 四捨五入取整 ,返回123        
SELECT ROUND (0.456,2) FROM DUAL;  --作用保留兩位小數,返回0.46
SELECT ROUND (0.456,2)||'%' FROM DUAL;  --想要顯示的結果爲0.46%,但實際顯示結果爲 .46%,這是由於Oracle中數字轉爲字符串時捨棄了以0起始的整數位部分

--關聯測試
SELECT TO_CHAR (0.456) FROM DUAL  --直接數字轉字符串,返回.456
SELECT '%'||0.456||'%' FROM DUAL  --返回%.456%
--可見當oracle 判斷出該列爲字符串格式的時候,先進行的是格式轉換(即由0.456 數字型轉爲.456字符串類型),再進行拼接。

--正常顯示0.46%的方式 使用格式化字符串TO_CHAR(number,'fm999999999.99')
--比較觀察下面兩種輸入fm後的值及返回的結果
SELECT TO_CHAR(ROUND (0.456,2),'fm999999999.99') FROM DUAL; --返回結果 .46
SELECT TO_CHAR(ROUND (0.456,2),'fm999999990.99') FROM DUAL; --返回結果 0.46
--關鍵在於小數點前格式字符時是0還是9;再看一個例子
SELECT TO_CHAR(0.4,'fm999999990.99') FROM DUAL; --返回結果 0.4
SELECT TO_CHAR(0.4,'fm999999990.90') FROM DUAL; --返回結果 0.40
--這樣可以很明顯的看出格式字符串中0和9格式化後的區別,即當爲數值位上爲0時需要顯示的則格式字符串上該位置爲0,無需顯示的爲9


PS:若有任何其他見解請留言,大家共同進步探討,謝謝!

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