On Sunday, March 13, 2016, Ken Tanzer <ken.tan...@gmail.com> wrote: > > On Mar 13, 2016 6:29 PM, "David G. Johnston" <david.g.johns...@gmail.com > <javascript:_e(%7B%7D,'cvml','david.g.johns...@gmail.com');>> wrote: > > > > On Sunday, March 13, 2016, Ken Tanzer <ken.tan...@gmail.com > <javascript:_e(%7B%7D,'cvml','ken.tan...@gmail.com');>> wrote: > >> > >> Hi. Is there a way with to_char to suppress a decimal point, like a > leading or trailing 0, so that integers will not have them, but non-ints > will? I'm hoping I'm missing something easy. Thanks. > >> > >> Ken > >> > >> SELECT val,to_char(val::decimal(6,2),'FM999,999D99') FROM > >> ( SELECT 1 AS val UNION SELECT 1.05 AS val) foo; > >> > >> val | to_char > >> ------+--------- > >> 1 | 1. > >> 1.05 | 1.05 > >> > >> > > > > Not seeing a native way to do so - and I'd question doing so as a > general rule - though you know your domain. If you must have this you will > want to utilize regexp_replace to identify the situation and replace it. A > simple "\.$" check and a substring would work also. > > > > David J. > > Thanks David. Just curious what part of this you would question. The case > for numbers, currency in particular, coming out with a decimal and pennies > when present, and as whole dollars when not (and without a decimal place at > the end) seems pretty common and clear cut. What am I missing in your > question? >
Typically if I'm going to format any currency amount with pennies I would format all values, even those with zero pennies, to the same precision. Typically when displaying such amounts I'd right-justify the values and thus cause the decimals to line up. David J.