From 3cd49aeaded6b9d4c9a76fda5078cdae3907c6b0 Mon Sep 17 00:00:00 2001
From: yasondinalt <yason.bad@gmail.com>
Date: Mon, 4 Apr 2016 04:26:55 +0300
Subject: [PATCH] DecimalField rounding: first cast to str, then use
 ROUND_HALF_UP

---
 django/db/backends/utils.py         | 1 +
 django/db/models/fields/__init__.py | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/django/db/backends/utils.py b/django/db/backends/utils.py
index 9413481..7b865de 100644
--- a/django/db/backends/utils.py
+++ b/django/db/backends/utils.py
@@ -194,6 +194,7 @@ def format_number(value, max_digits, decimal_places):
         return None
     if isinstance(value, decimal.Decimal):
         context = decimal.getcontext().copy()
+        context.rounding = decimal.ROUND_HALF_UP
         if max_digits is not None:
             context.prec = max_digits
         if decimal_places is not None:
diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py
index 0e42505..beeccd7 100644
--- a/django/db/models/fields/__init__.py
+++ b/django/db/models/fields/__init__.py
@@ -1604,7 +1604,10 @@ class DecimalField(Field):
         if value is None:
             return value
         try:
-            return decimal.Decimal(value)
+            if isinstance(value, six.text_type):
+                return decimal.Decimal(value)
+            else:
+                return decimal.Decimal(str(value))
         except decimal.InvalidOperation:
             raise exceptions.ValidationError(
                 self.error_messages['invalid'],
-- 
2.7.0

