Mixing Decimal and float

I V ivlenin at gmail.com
Wed Jun 2 16:35:50 EDT 2010


On Wed, 02 Jun 2010 05:17:11 -0700, B.V. wrote:
> But trying to be open to other languages, the server implements also an
> XMLRPC interface (and also a JSONRPC-like interface). That's the key
> point: Decimal is python specific. So in an application, you can't rely
> on the value received from a client, because depending on the protocol,
> the type of the value is different. So the idea was to create a class
> that can behave like a Decimal or a float depending on the context, and
> set xmlrpclib.Unmarshaller.dispatch["double"] to a function that return
> a Float instance.

Looking at the Tryton docs, it seems that it already supports field types 
that can't be directly represented in XMLRPC or JSON, like BigInteger or 
Selection. How are these serialized over the non-python RPC mechanisms? 
Could you not do the same for Decimals?
 
> A contributor filed an issue on the bug tracker (https://
> bugs.tryton.org/roundup/issue1575) and because he's a nice guy (ok it's
> a friend of mine), he made a patch proposal (http://
> codereview.appspot.com/1387041). The end of the story is in the comments
> of the proposal.
> 
> 
>> > But we also need to do:
>> > isinstance(Float('1'), float) == True isinstance(Float('1'), Decimal)
>> > == True
>>
>> Can you explain why you need this?
> 
> It's a requirement of the project leader.
> 
> 
>> Should isinstance(Float('1.1'), float) and isinstance(Float('1.1'),
>> Decimal) also both be true, or would only one of those be true?  (And
>> by the way, what value would Float('1.1') have?  float('1.1') and
>> Decimal('1.1') are different values.)
> 
> I think they both should be True, for '1', '1.1', '0', '0.1', ... For
> the value, I would say that it depends of the definition of the field
> (fields.Float or fields.Numeric).
> 
> 
> 
>> I don't think your approach can succeed;  I'd suggest just subclassing
>> 'object' and abandoning the 'isinstance' requirements.  Or perhaps
>> creating a subclass of Decimal that interacts nicely with floats.  You
>> might also want to investigate the numbers ABC, though that's new in
>> Python 2.6.
> 
> First, Float implementation was a subclass of Decimal that works with
> floats, and solves many (maybe all) problems. But as you may read in the
> comments of the patch proposal, it seems to be not enough.
> 
> B.




More information about the Python-list mailing list