Django

Code

Changeset 9394

Show
Ignore:
Timestamp:
11/11/08 18:35:24 (2 months ago)
Author:
kmtracey
Message:

Fixed #5079 -- Avoid converting Decimals to floats during save to the database.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/db/backends/util.py

    r8193 r9394  
    125125    decimal places. 
    126126    """ 
    127     return u"%.*f" % (decimal_places, value) 
     127    if isinstance(value, decimal.Decimal): 
     128        context = decimal.getcontext().copy() 
     129        context.prec = max_digits 
     130        return u'%s' % str(value.quantize(decimal.Decimal(".1") ** decimal_places, context=context)) 
     131    else: 
     132        return u"%.*f" % (decimal_places, value) 
  • django/trunk/tests/regressiontests/model_fields/models.py

    r8143 r9394  
    3333    ) 
    3434    c = models.IntegerField(choices=CHOICES, null=True) 
     35     
     36class BigD(models.Model): 
     37    d = models.DecimalField(max_digits=38, decimal_places=30) 
    3538 
    3639__test__ = {'API_TESTS':""" 
     
    7982[] 
    8083 
    81  
     84# Regression test for #5079 -- ensure decimals don't go through a corrupting 
     85# float conversion during save.   
     86>>> bd = BigD(d="12.9") 
     87>>> bd.save() 
     88>>> bd = BigD.objects.get(pk=bd.pk) 
     89>>> bd.d == decimal.Decimal("12.9") 
     90True 
    8291"""}