天天看點

Oracle中保留兩位小數

Oracle中保留兩位小數

在最近的項目開發中,有個業務需求是界面顯示的數字需要保留兩位小數,目前我想到的解決方法有兩種:

(1)在寫SQL的時候,直接保留兩位小數

(2)在java代碼裡面将查詢出來的數進行格式化處理,保留兩位小數

先說第一種方案:在SQL中的處理

我使用的oracle資料庫,是以有3個函數可以選擇,分别是:

(1)ROUND(A/B,2)

ROUND()函數是會将計算結果進行四舍五入的,如果所需要的值需要進行四舍五入,就可以選擇這個函數,可以有一個參數,也可以有兩個參數;如果有兩個param,第一個是你的計算表達式,第二個是需要保留的小數位數。例子如下:

Oracle中保留兩位小數

(2)TRUNC(A/B,2)

TRUNC()函數是不會将計算結果進行四舍五入的,如果所需要的值不需要進行四舍五入,就可以選擇這個函數,可以有一個參數,也可以有兩個參數;如果有兩個param,第一個是你的計算表達式,第二個是需要保留的小數位數。例子如下:

Oracle中保留兩位小數

(3)TO_CHAR(A/B,‘FM99990.99’)

TO_CHAR()是一個格式化函數,第一個參數是計算表達式,第二個參數是指定格式化的格式,如果保留兩位小數則小數點後寫兩個99,這裡的數字9代表的數字,也是一個占位符,表示該位置上以後會是一個數字,為什麼小數點前面會是一個0,而不是9,是因為如果計算結果小于1,那麼隻會顯示小數點和小數點之後的部分,前面的0會忽略掉

Oracle中保留兩位小數
Oracle中保留兩位小數

2019年7月25日更新

在評論中有人提到一個問題,在SQL計算中,比如1/10的結果是0.1,但是實際需要得到的結果是0.10,那麼用我上面的那些方法得到的結果隻可以是0.1,不可以是0.10,對于這個問題,我去oracle官網的文檔檢視了一下,可以采用如下的寫法得到:

1

這裡就是需要注意的一點就是0和9的差別,具體我沒找到相關的資訊,暫時說一下我的想法,0和9應該都是類似于占位符,你實際除得的結果中的數字一般會替換掉9,但是當你整數部分隻有一位且是0的時候,那麼你需要在格式化的時候用0來指定格式化的模型,如上文那個.67的樣子,小數點後面的值,你可以用0也可以用9來指定模式,用9指定的結果就是你的小數點本來後面幾位它就顯示幾位,如果用0來指代,它在位數不夠的情況下會用0去進行占位填充。

格式化官方文檔oracle 10g

oracle format models

為人:謙遜、激情、博學、審問、慎思、明辨、 笃行

學問:紙上得來終覺淺,絕知此事要躬行

為事:工欲善其事,必先利其器。

轉載請标注出處!