近期在使用oracle to_char函數處理浮點數時發現有坑,這里做個小結:
網上可以找到關於to_char中使用fm9990.0099中的相關解釋:
- 0表示:如果參數(double或者float類型)存在數字就顯示數字,不存在數字就顯示0
- 9表示:如果參數(double或者float類型)存在數字就顯示數字,不存在數字就顯示空格
- FM表示:將9帶來的空格刪除
下面通過具體代碼進行相關驗證
--SQL示例代碼:
With Tmp As (Select 2312320.012 n From dual Union All Select 0.012322 n From dual Union All Select 0.012564 n From dual Union All Select -0.012 n From dual Union All Select -10023 n From dual Union All Select 8989898 n From dual) Select --全部為 9 To_Char(t.n, '9999999999.9999999') all_9, --全部為 9 同時使用 FM To_Char(t.n, 'FM999999999999999.9999999') all_FM9, --全部為 0 To_Char(t.n, '000000000.0000000') all_0, --全部為 0 同時使用 FM To_Char(t.n, 'FM000000000.0000000') all_FM0, --個位開始向右使用 0 向左使用9 To_Char(t.n, '9999999990.0000000') some9one0, --個位開始向右使用 0 向左使用9 同時使用FM To_Char(t.n, 'FM999999999999990.00000000') some9one0P0_FM, --個位使用 0 同時使用FM To_Char(t.n, 'FM999999999999990.99999999') some9one0P9_FM, --個位使用 0 前四位小數位使用 0 同時使用FM To_Char(t.n, 'FM999999999999990.0000999') some9one0P09_FM From tmp t;
--執行結果:

--總結:
1、9在不同的地方可能會使用不同的占位符:整數位使用空格;小數位有有效數時使用0,無有效數時使用空格;
2、9對於絕對值小於1的小數的個位會處理成空格
3、FM只能用來刪除9所產生的多余的占位符(空格或0),對於0產生的占位符無效。
--思考:
四舍五入可以通過控制9或0的個數實現。