Korzystanie z FM
format model modifier, aby się zamknąć, ponieważ nie otrzymasz końcowych zer po separatorze dziesiętnym; ale nadal otrzymasz sam separator, np. 50.
. Można użyć rtrim
pozbyć się, że:
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
Zauważ, że używam to_char(0, 'D')
wygenerować znak do przycinania, aby dopasować separator dziesiętny - tak to wygląda w tym samym charakterze, ,
lub .
, jak pierwszy dodaje to_char
.
Lekkim minusem jest utrata wyrównania. Jeśli ten jest używany w innym miejscu może nie ma znaczenia, ale to nie to można również owinąć go w lpad
, który rozpoczyna się, żeby wyglądało to trochę skomplikowane:
...
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
Można użyć '90D99', ale że wprowadź drugą wartość jako "0,4" zamiast "0,40". Nie jestem pewien, czy możesz mieć jeden model, który dopuszcza zarówno "0,40" i "50". –
90D99 daje mi taką samą 0.40. 0,40 to mój błąd ... potrzebuję 0,4 ofc. – BeHunter