trailing zeros v numericu

11 views
Skip to first unread message

Michal Kozusznik

unread,
May 5, 2014, 8:21:56 AM5/5/14
to postgr...@googlegroups.com
Ahoj

Takovy priklad:

SELECT 2.4::numeric/1
-------
2.4000000000000000

Existuje nejaky zpusob aby postgresql vracel hodnoty typu numeric bez nul na konci?
Prijde mi to divne (i kdyz nejsem prvni co na to narazil).

Prevedli jsme real a double na numeric a jsme nepocitali s takovym chovanim. :(

Michal

unread,
May 5, 2014, 8:28:21 AM5/5/14
to postgr...@googlegroups.com
napadlo mi toto:

SELECT (2.4::numeric/1)::int::numeric;
> --
> Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny
> „PostgreSQL-cz“ ve Skupinách Google.
> Chcete-li zrušit odběr skupiny a přestat dostávat e-maily ze skupiny,
> zašlete e-mail na adresu postgresql-c...@googlegroups.com.
> Další možnosti najdete na https://groups.google.com/d/optout.



--
Michal Paulovic as BBaron

Michal Kozusznik

unread,
May 5, 2014, 8:49:54 AM5/5/14
to postgr...@googlegroups.com
No jo... a co desetina mista ;)

Tomáš Cicák

unread,
May 5, 2014, 8:57:43 AM5/5/14
to postgr...@googlegroups.com
Ahoj, co třeba
select (2.4/1)::float::numeric
jen tam pak je omezení maximálně na 14 desetinným míst

Tomáš


Dne 5. 5. 2014 14:21, Michal Kozusznik napsal(a):

Pavel Stehule

unread,
May 5, 2014, 8:59:10 AM5/5/14
to PostgreSQL-cz
Zatim mne nenapada jine nez "hloupe" reseni

select regexp_replace((2.4::numeric/1)::text, '0+$','');

a trochu se bojim, ze bez hackovani neni jine

pripadne pro zobrazeni asi muzete udelat cast to double - v ramci zobrazeni vysledku chyba uz nebude hrat velkou roli

takze pro finalni zobrazeni by melo stacit a byt bezpecne ::double precision


Dne 5. května 2014 14:28 Michal <coo...@gmail.com> napsal(a):
Další možnosti najdete na adrese https://groups.google.com/d/optout.

Michal Kozusznik

unread,
May 5, 2014, 9:09:27 AM5/5/14
to postgr...@googlegroups.com
Misto regexpu asi lepsi/rychlejsi bude rtrim.
To si ale muzu udelat uz v aplikaci formatovanim cisla ceho jsem si chtel usetrit. Spis jsem pocital s nejakym nastavenim postgresu apod.

Kazdopadne diky.
MK

Leknín Řepánek

unread,
May 5, 2014, 9:13:50 AM5/5/14
to postgr...@googlegroups.com
No a jakej je smysl týhle štrapáce?
To číslo s těma moc nulama na konci je jen "reprezentace na obrazovku" a
troufnu si tvrdit, že numeric neni v týhle formě ideální typ pro vypsání
výsledku (ale je možný udělat numeric s danym počtem míst za desetinnou
čárkou numeric(30,5)...).
Pro nějaký výpisy bych asi ten výstup formátoval, asi fcí...

Je;

Leknín Řepánek

unread,
May 5, 2014, 9:18:52 AM5/5/14
to postgr...@googlegroups.com
Jinak, to co hled8te je fce, jmenuje se to_char

ruian=# select to_char(2.4::numeric/1, '9D99');
to_char
---------
2.40
(1 řádka)


Tady ty leading nuly asi pudou nějak vošéfovat.

Ale problém asi bude, že to číslo neni == 2.4, ale má nějakej bordel
nakonci.

On Mon, May 05, 2014 at 06:09:27AM -0700, Michal Kozusznik wrote:

Leknín Řepánek

unread,
May 5, 2014, 9:20:33 AM5/5/14
to postgr...@googlegroups.com
tohle facha
select to_char(2.4::numeric/1, 'FM9D99');
to FM potlaci nuly

On Mon, May 05, 2014 at 06:09:27AM -0700, Michal Kozusznik wrote:

Michal Kozusznik

unread,
May 5, 2014, 9:35:34 AM5/5/14
to postgr...@googlegroups.com
Pro mne otazka zni: jaky je smsl zobrazovat tolik nul, kdyz nemaji vyznam? A pokud aplikace chce zobrazit cislo (cim numeric je) tak nepocita s tim ze tam budou nejake nesmslne nuly.
Numeric(30,5) je mozne pouzit, my ale nevime jaka bude presnost cisla (by bussines design). Co pak? A co kdyz 30 cisel nestaci?

Skonci to formatovanim cisla. Cekal bych ale nejaky prepinac ktery proste orizne nuly na vystupu z postgresu.

Dne pondělí, 5. května 2014 15:13:50 UTC+2 mluvicí hrášek - jeleniste napsal(a):

Michal Kozusznik

unread,
May 5, 2014, 9:37:24 AM5/5/14
to postgr...@googlegroups.com
Ja nechci formatovar na 2 desetina mista, a oriznout nepouzivane nuly :)

Dne pondělí, 5. května 2014 15:18:52 UTC+2 mluvicí hrášek - jeleniste napsal(a):

Leknín Řepánek

unread,
May 5, 2014, 9:46:19 AM5/5/14
to postgr...@googlegroups.com
Tam se dat těch čísel desetinnejch dát klidně padesát. Přepínač FM ve
formátovacim řetězci potlačí tisk těch trailing nul.

ruian=# select to_char(2.400000000000000001000::numeric/1,
'FM9D9999999999999999999999999999999999999999999999999');
to_char
----------------------
2.400000000000000001
(1 řádka)

Pavel Stehule

unread,
May 5, 2014, 9:48:52 AM5/5/14
to PostgreSQL-cz

Dne 5. května 2014 15:46 Leknín Řepánek <godzil...@gmail.com> napsal(a):
(2.400000000000000001000::numeric/1,


jj

tohle funguje

postgres=# select to_char(2.40000000000000000000::numeric/1,'FM9999999D99999999');
 to_char
---------
 2.4
(1 row)
Reply all
Reply to author
Forward
0 new messages