prePEP: Money data type
Batista, Facundo
FBatista at uniFON.com.ar
Mon Oct 20 17:05:35 EDT 2003
Alex Martelli wrote:
#- > The problem is that decimalSeparator and thousandSeparator
#- are important
#- > to parse the string in the constructor (if I need str() to
#- give me a ','
#- > as decimal point, I also need to supply a ',' as decimal
#- point to the
#- > constructor).
#-
#- Hmmm, I see your point. But, in general, parsing '1.000' would be
#- ambiguous -- is it one thousand with '.' as the thousandSeparator or
#- one in a currency which requires three decimal digits?
Dependes of the values of thousandSeparator and decimalSeparator. If you
overload them:
thousandSeparator = '.'
decimalSeparator = '.'
the behaviour is unpredictable (should I generate an exception or
something?)
#- See? After I called setlocale to set it to the user locale (rather
#- than the neutral 'C' locale), 'en_US' in my case, I got lot of info
#- in the dict that locale.localeconv() returns: money decimal point is
#- '.', fractional-parts-digits are 2 for both base and
#- internationalized
#- formatting, thousands separator is comma for both ordinary and money
#- amounts, the currency symbol is '$' in base use but 'USD' for fully
#- internationalized used, etc, etc.
...
#- The base class Money seem to need just a few of these to be able to
#- parse strings (I would not use them for default output with either
#- repr or str, although maybe a non-special method such as 'format'
#- MIGHT, for the user's convenience, emit a string formatted by such
#- guidelines -- I'm neutral, say +0, on the latter).
I was using to parse the input and to build the output, the elements
thousandSeparator, decimalSeparator and currencySymbol. This can be very
easily overloaded, but the default was MY taste.
Seems a lot better to make the default based in locale.
Why doesn't like to you to
>>> m = Money(23.3, 2)
>>> print m
$23.30
?
. Facundo
More information about the Python-list
mailing list