Hi everyone. I just came across a weird behavior and I'm wondering if it's 
some kind of bug or just my fault.

I have a model for a product like this:

db.define_table('products',
    Field('name',length=128, notnull=True),
    Field('sale_price',type='decimal(14,4)',default=0, notnull=True))

Now when the user adds a product to the cart I'm storing the row for the 
product in a dictionary in the session like this:

session.cart[product.id] = product

finally the view that displays it lets you pick among several payment 
options and based on the option it multiplies the price by another number 
like this:

{{=session.cart[id].sale_price * session.payment_factor}}

Both sale price and payment factor are store in DB as decimal(14,4). The 
first time the code is run the view executes correctly. But when you add 
another product to the cart, or modify any other thing that requires a 
reload or repost of the page I get an error like this:

TypeError: unsupported operand type(s) for *: 'float' and 'Decimal'


So what is happening is that after the first time my variable which is 
store in the session and that should be treated like a Decimal is being 
returned as a float. This is happening in the development environment with 
SQLite, I have not tested this yet under MySQL. I think it is caused by the 
fact that SQLite stores decimals as float, buy I wonder why does the first 
time it is transformed to Decimal, and then just used as a float? And I 
wonder if I must manually converted them to Decimal every time I use this 
variables.

Hope someone can help.

Reply via email to