小數點前的0的顯示問題

2021-08-29 21:42:21 字數 3516 閱讀 1720

在處理資料時發現乙個問題,oracle對於小於1的小數,小數點前面的0是不顯示的。

sql> create table t1_number (num number);

table created

sql> insert into t1_number values(0.3268);

1 row inserted

sql> insert into t1_number values(0.57965686);

1 row inserted

sql> insert into t1_number values(52345234.5686);

1 row inserted

sql> insert into t1_number values(4.552686);

1 row inserted

sql> commit;

commit complete

sql> column num format 99999999999.9999999999999

sql> select * from t1_number;

num--------------------------

.3268000000000

.5796568600000

52345234.5686000000000

4.5526860000000

使用pl/sql dev工具檢視時是有前面的0的

通過column num format 000000000000.99999999999設定也可以顯示前面的0

但是這些都只是顯示的結果,而不是資料庫儲存結果

sql>

column num format 00000000000.9999999999999

sql>

select * from t1_number;

num--------------------------

00000000000.3268000000000

00000000000.5796568600000

00052345234.5686000000000

00000000004.5526860000000

00000000005.2920000000000

sql>

select substr(num,1,1) from t1_number; su

--..5

45可以看到,無論前面出現多少位,通過substr函式獲取的第一位任然是'.'

無論怎麼轉換,只要最終輸出結果是數值型的,小數點前的0必然被丟棄,所以只有將數值轉換為字元型,大致有兩種方法:

1、直接使用to_char函式

首先實驗一下將小數點前和小數點後都加上99999999的格式:

sql>

select to_char(num,'999999999.999999999') from t1_number;

to_char(num,'9999999

--------------------

.326800000

.579656860

52345234.568600000

4.552686000

5.292000000

發現小數點前還是沒有0,而小數點後的0多出來了

再實驗一下小數點前和小數點後都加上0000000000格式:

sql>

select to_char(num,'00000000000.000000000') from t1_number;

to_char(num,'000000000

----------------------

00000000000.326800000

00000000000.579656860

00052345234.568600000

00000000004.552686000

00000000005.292000000

發現小數點前是有0了,但是兩邊的0都多出來了,使用fm來去掉多於的0:

sql>

select to_char(num,'fm00000000000.000000000') from t1_number;

to_char(num,'fm0000000

----------------------

00000000000.326800000

00000000000.579656860

00052345234.568600000

00000000004.552686000

00000000005.292000000

沒有效果,說明fm只能去掉用9表示的格式中產生的0:

sql>

select to_char(num,'fm999999999.999999999') from t1_number;

to_char(num,'fm99999

--------------------

.3268

.57965686

52345234.5686

4.552686

5.292

但是這樣還是沒有0,最後發現可以將小數點前的第一位置為0即可(注意9的個數要大於數值的位數):

sql>

select to_char(num,'fm999999990.999999999') from t1_number;

to_char(num,'fm99999

--------------------

0.3268

0.57965686

52345234.5686

4.552686

5.292

檢查一下第一位,沒有問題:

sql>

select substr(to_char(num,'fm999999990.999999999'),1,1) from t1_number; su

--005

452、使用decode函式

既然小於1的小數首位必然是'.',那就判斷首位是否為'.',是則在前面加上'0'即可

sql>

select decode(substr(num,1,1),'.','0'||num,num) from t1_number

decode(substr(num,1,1),'.','0'||num,num)

-----------------------------------------

0.3268

0.57965686

52345234.5686

4.552686

5.292

同樣檢查一下第一位,沒有問題

sql> 

select substr(decode(substr(num,1,1),'.','0'||num,num),1,1) fro

m t1_number;

su--00

545

也可以寫個函式來判斷一下,不過可以用decode直接出來,感覺也沒什麼必要,暫時就這些吧。

bc顯示小數點前的0

bc是強大而常用的計算工具。不過在除法運算時,如果得到的結果值小於1,得到的小數前面的0不存。本篇提供幾個常用小數點前缺0的解決方法。root 361way bc bc 1.06.95 this is free software with absolutely no warranty.for det...

oracle查詢不顯示小數點前的0

1.問題起源 oracle 資料庫字段值為小於1的小數時,使用char型別處理,會丟失小數點前面的0 例如0.35就變成了.35 2.解決辦法 用to char函式格式化數字顯示 select to char 0.338,fm9999999990.00 from dual 結果 0.34 這裡重點要...

報表小數點前0不顯示的問題解決

根據公司財務部的要求,需要在erp報表中的數字輸出格式需要在小數點前的0也要顯示,且如果數字是整數,那麼整數後面最好不要把0 精度 帶出來。正常情況下,無任何格式的輸出是.1 0.1 財務的會計員看多數字時會把.1 0.1 看成1,對於這種只是顯示小數點前面的0,根據網上關於oracle的格式輸出是...