Utilizzare il FM
format model modifier per avvicinarsi, poiché non si otterranno gli zeri finali dopo il separatore decimale; ma otterrai comunque il separatore stesso, ad es. 50.
. È possibile utilizzare rtrim
per sbarazzarsi di che:
select to_char(a, '99D90'),
to_char(a, '90D90'),
to_char(a, 'FM90D99'),
rtrim(to_char(a, 'FM90D99'), to_char(0, 'D'))
from (
select 50 a from dual
union all select 50.57 from dual
union all select 5.57 from dual
union all select 0.35 from dual
union all select 0.4 from dual
)
order by a;
TO_CHA TO_CHA TO_CHA RTRIM(
------ ------ ------ ------
.35 0.35 0.35 0.35
.40 0.40 0.4 0.4
5.57 5.57 5.57 5.57
50.00 50.00 50. 50
50.57 50.57 50.57 50.57
Nota che sto usando to_char(0, 'D')
per generare il carattere di tagliare, per abbinare il separatore decimale - così sembra per lo stesso carattere, ,
o .
, come il primo to_char
aggiunge.
Il leggero svantaggio è che si perde l'allineamento. Se questo viene utilizzato altrove potrebbe non importa, ma lo fa, allora si può anche avvolgere in un lpad
, che inizia a farlo sembrare un po 'complicato:
...
lpad(rtrim(to_char(a, 'FM90D99'), to_char(0, 'D')), 6)
...
TO_CHA TO_CHA TO_CHA RTRIM(LPAD(RTRIM(TO_CHAR(A,'FM
------ ------ ------ ------ ------------------------
.35 0.35 0.35 0.35 0.35
.40 0.40 0.4 0.4 0.4
5.57 5.57 5.57 5.57 5.57
50.00 50.00 50. 50 50
50.57 50.57 50.57 50.57 50.57
fonte
2013-04-08 10:59:51
È possibile utilizzare '90D99', ma che avrebbe fai il tuo secondo valore come '0,4' piuttosto che' 0,40'. Non sono sicuro che tu possa avere un modello che permetta sia '0,40' che' 50'. –
90D99 restituisce lo stesso 0.40. 0,40 è stato il mio errore ... ho bisogno di 0,4 ofc. – BeHunter