From: | Gavin Flower <GavinFlower(at)archidevsys(dot)co(dot)nz> |
---|---|
To: | Gavan Schneider <pg-gts(at)snkmail(dot)com> |
Cc: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: Money casting too liberal? |
Date: | 2013-04-02 07:50:10 |
Message-ID: | 515A8DB2.1060002@archidevsys.co.nz |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On 30/03/13 04:08, Gavan Schneider wrote:
> Some thoughts.
>
> The current MONEY type might be considered akin to ASCII. Perfect for
> a base US centric accounting system where there are cents and dollars
> and no need to carry smaller fractions. As discussed, there are some
> details that could be refined.
>
> When it comes to this type being used in full blown money systems it
> lacks the ability to carry fractions of cents and keep track of
> currencies. It also needs to play nicer with other exact types such as
> numeric, i.e., no intermediate calculations as real.
>
> Therefore the discussion is really about the desired role for the
> MONEY type. Should it be refined in its current dallar and cents mode?
> or, be promoted to a more universal role (akin to a shift from ASCII
> to UTF)?
>
> If there is merit in making MONEY work for most situations involving
> financial transactions I think the following might apply:
>
> - keep integer as the underlying base type (for performance)
>
> - generalise the decimal multiplier of a MONRY column so a specific
> MONEY column can be what its creator wants (from partial cents to
> millions of dollars/Yen/Other, along with rounding/truncating rules as
> required by r the user of his/her external agencies)
>
> - define the currency for a given column and only allow this to change
> in defined ways, and specifically forbid implicit changes such as
> would arise from altering LOCALE information
>
> - ensure the MONEY type plays nice with other exact precision types,
> i.e., convert to REAL/FLOAT as a very last resort
>
>
> Personally I don't think it is appropriate for the MONEY type to have
> variable characteristics (such as different currencies) within a given
> column, rather the column variable should define the currency along
> with the desired decimal-multiplier and whatever else is required. The
> actual values within the column remain as simple integers. This is
> mostly based on performance issues. If the MONRY type is to be used it
> has to offer real performance benefits over bespoke NUMERIC applications.
>
> Regards
> Gavan Schneider
>
>
>
I agree 100%.
In the bad old days when I was a COBOL programmer we always stored money
in the COBOL equivalent of an integer (numeric without a fractional
part) to avoid round off, but we displayed with a decimal point to
digits to the left. So storing as an integer (actually bigint would be
required) is a good idea, with parameters to say how many effective
digits in the fractional part, and how many fractional digits to display
etc. - as you said.
Cheers,
Gavin
From | Date | Subject | |
---|---|---|---|
Next Message | Gavin Flower | 2013-04-02 08:03:15 | Re: Money casting too liberal? |
Previous Message | Gavin Flower | 2013-04-02 07:40:18 | Re: Money casting too liberal? |