Commit 2a1c9072 authored by Karen Tracey's avatar Karen Tracey
Browse files

[1.0.X] Fixed #5079 -- Avoid converting Decimals to floats during save to the database.

[9394] from trunk.


git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.0.X@9395 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 11736980
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -124,4 +124,9 @@ def format_number(value, max_digits, decimal_places):
    Formats a number into a string with the requisite number of digits and
    decimal places.
    """
    if isinstance(value, decimal.Decimal):
        context = decimal.getcontext().copy()
        context.prec = max_digits
        return u'%s' % str(value.quantize(decimal.Decimal(".1") ** decimal_places, context=context))
    else:
        return u"%.*f" % (decimal_places, value)
+10 −1
Original line number Diff line number Diff line
@@ -33,6 +33,9 @@ class Whiz(models.Model):
    )
    c = models.IntegerField(choices=CHOICES, null=True)
    
class BigD(models.Model):
    d = models.DecimalField(max_digits=38, decimal_places=30)

__test__ = {'API_TESTS':"""
# Create a couple of Places.
>>> f = Foo.objects.create(a='abc', d=decimal.Decimal("12.34"))
@@ -78,5 +81,11 @@ u''
>>> Foo.objects.filter(d=u'1.23')
[]


# Regression test for #5079 -- ensure decimals don't go through a corrupting
# float conversion during save.  
>>> bd = BigD(d="12.9")
>>> bd.save()
>>> bd = BigD.objects.get(pk=bd.pk)
>>> bd.d == decimal.Decimal("12.9")
True
"""}