Index: django/core/validators.py
===================================================================
--- django/core/validators.py	(revision 5992)
+++ django/core/validators.py	(working copy)
@@ -423,7 +423,7 @@
         except DecimalException:
             raise ValidationError, _("Please enter a valid decimal number.")
 
-        pieces = str(val).split('.')
+        pieces = str(val).lstrip("-").split('.')
         decimals = (len(pieces) == 2) and len(pieces[1]) or 0
         digits = len(pieces[0])
 
Index: django/newforms/fields.py
===================================================================
--- django/newforms/fields.py	(revision 5992)
+++ django/newforms/fields.py	(working copy)
@@ -190,7 +190,7 @@
             value = Decimal(value)
         except DecimalException:
             raise ValidationError(ugettext('Enter a number.'))
-        pieces = str(value).split('.')
+        pieces = str(value).lstrip("-").split('.')
         decimals = (len(pieces) == 2) and len(pieces[1]) or 0
         digits = len(pieces[0])
         if self.max_value is not None and value > self.max_value:
Index: tests/regressiontests/forms/tests.py
===================================================================
--- tests/regressiontests/forms/tests.py	(revision 5992)
+++ tests/regressiontests/forms/tests.py	(working copy)
@@ -1167,6 +1167,12 @@
 Traceback (most recent call last):
 ...
 ValidationError: [u'Ensure that there are no more than 2 digits before the decimal point.']
+>>> f.clean('-123.45')
+Traceback (most recent call last):
+...
+ValidationError: [u'Ensure that there are no more than 4 digits in total.']
+>>> f.clean('-12.34')
+Decimal("-12.34")
 >>> f = DecimalField(max_digits=4, decimal_places=2, required=False)
 >>> f.clean('')
 
