Index: django/db/models/fields/__init__.py
===================================================================
--- django/db/models/fields/__init__.py	(revision 3355)
+++ django/db/models/fields/__init__.py	(working copy)
@@ -617,14 +617,14 @@
     def get_manipulator_field_objs(self):
         return [curry(forms.FilePathField, path=self.path, match=self.match, recursive=self.recursive)]
 
-class FloatField(Field):
+class DecimalField(Field):
     empty_strings_allowed = False
     def __init__(self, verbose_name=None, name=None, max_digits=None, decimal_places=None, **kwargs):
         self.max_digits, self.decimal_places = max_digits, decimal_places
         Field.__init__(self, verbose_name, name, **kwargs)
 
     def get_manipulator_field_objs(self):
-        return [curry(forms.FloatField, max_digits=self.max_digits, decimal_places=self.decimal_places)]
+        return [curry(forms.DecimalField, max_digits=self.max_digits, decimal_places=self.decimal_places)]
 
 class ImageField(FileField):
     def __init__(self, verbose_name=None, name=None, width_field=None, height_field=None, **kwargs):
Index: django/db/backends/ado_mssql/creation.py
===================================================================
--- django/db/backends/ado_mssql/creation.py	(revision 3355)
+++ django/db/backends/ado_mssql/creation.py	(working copy)
@@ -7,7 +7,7 @@
     'DateTimeField':     'smalldatetime',
     'FileField':         'varchar(100)',
     'FilePathField':     'varchar(100)',
-    'FloatField':        'numeric(%(max_digits)s, %(decimal_places)s)',
+    'DecimalField':      'numeric(%(max_digits)s, %(decimal_places)s)',
     'ImageField':        'varchar(100)',
     'IntegerField':      'int',
     'IPAddressField':    'char(15)',
Index: django/db/backends/postgresql/introspection.py
===================================================================
--- django/db/backends/postgresql/introspection.py	(revision 3355)
+++ django/db/backends/postgresql/introspection.py	(working copy)
@@ -80,5 +80,5 @@
     1114: 'DateTimeField',
     1184: 'DateTimeField',
     1266: 'TimeField',
-    1700: 'FloatField',
+    1700: 'DecimalField',
 }
Index: django/db/backends/postgresql/creation.py
===================================================================
--- django/db/backends/postgresql/creation.py	(revision 3355)
+++ django/db/backends/postgresql/creation.py	(working copy)
@@ -11,7 +11,7 @@
     'DateTimeField':     'timestamp with time zone',
     'FileField':         'varchar(100)',
     'FilePathField':     'varchar(100)',
-    'FloatField':        'numeric(%(max_digits)s, %(decimal_places)s)',
+    'DecimalField':      'numeric(%(max_digits)s, %(decimal_places)s)',
     'ImageField':        'varchar(100)',
     'IntegerField':      'integer',
     'IPAddressField':    'inet',
Index: django/db/backends/sqlite3/creation.py
===================================================================
--- django/db/backends/sqlite3/creation.py	(revision 3355)
+++ django/db/backends/sqlite3/creation.py	(working copy)
@@ -10,7 +10,7 @@
     'DateTimeField':                'datetime',
     'FileField':                    'varchar(100)',
     'FilePathField':                'varchar(100)',
-    'FloatField':                   'numeric(%(max_digits)s, %(decimal_places)s)',
+    'DecimalField':                 'numeric(%(max_digits)s, %(decimal_places)s)',
     'ImageField':                   'varchar(100)',
     'IntegerField':                 'integer',
     'IPAddressField':               'char(15)',
Index: django/db/backends/mysql/introspection.py
===================================================================
--- django/db/backends/mysql/introspection.py	(revision 3355)
+++ django/db/backends/mysql/introspection.py	(working copy)
@@ -76,11 +76,11 @@
 DATA_TYPES_REVERSE = {
     FIELD_TYPE.BLOB: 'TextField',
     FIELD_TYPE.CHAR: 'CharField',
-    FIELD_TYPE.DECIMAL: 'FloatField',
+    FIELD_TYPE.DECIMAL: 'DecimalField',
     FIELD_TYPE.DATE: 'DateField',
     FIELD_TYPE.DATETIME: 'DateTimeField',
-    FIELD_TYPE.DOUBLE: 'FloatField',
-    FIELD_TYPE.FLOAT: 'FloatField',
+    FIELD_TYPE.DOUBLE: 'DecimalField',
+    FIELD_TYPE.FLOAT: 'DecimalField',
     FIELD_TYPE.INT24: 'IntegerField',
     FIELD_TYPE.LONG: 'IntegerField',
     FIELD_TYPE.LONGLONG: 'IntegerField',
Index: django/db/backends/mysql/creation.py
===================================================================
--- django/db/backends/mysql/creation.py	(revision 3355)
+++ django/db/backends/mysql/creation.py	(working copy)
@@ -11,7 +11,7 @@
     'DateTimeField':     'datetime',
     'FileField':         'varchar(100)',
     'FilePathField':     'varchar(100)',
-    'FloatField':        'numeric(%(max_digits)s, %(decimal_places)s)',
+    'DecimalField':      'numeric(%(max_digits)s, %(decimal_places)s)',
     'ImageField':        'varchar(100)',
     'IntegerField':      'integer',
     'IPAddressField':    'char(15)',
Index: django/db/backends/oracle/introspection.py
===================================================================
--- django/db/backends/oracle/introspection.py	(revision 3355)
+++ django/db/backends/oracle/introspection.py	(working copy)
@@ -48,5 +48,5 @@
     1114: 'DateTimeField',
     1184: 'DateTimeField',
     1266: 'TimeField',
-    1700: 'FloatField',
+    1700: 'DecimalField',
 }
Index: django/db/backends/oracle/creation.py
===================================================================
--- django/db/backends/oracle/creation.py	(revision 3355)
+++ django/db/backends/oracle/creation.py	(working copy)
@@ -7,7 +7,7 @@
     'DateTimeField':     'date',
     'FileField':         'varchar2(100)',
     'FilePathField':     'varchar2(100)',
-    'FloatField':        'number(%(max_digits)s, %(decimal_places)s)',
+    'DecimalField':      'number(%(max_digits)s, %(decimal_places)s)',
     'ImageField':        'varchar2(100)',
     'IntegerField':      'integer',
     'IPAddressField':    'char(15)',
Index: django/db/backends/postgresql_psycopg2/introspection.py
===================================================================
--- django/db/backends/postgresql_psycopg2/introspection.py	(revision 3355)
+++ django/db/backends/postgresql_psycopg2/introspection.py	(working copy)
@@ -80,5 +80,5 @@
     1114: 'DateTimeField',
     1184: 'DateTimeField',
     1266: 'TimeField',
-    1700: 'FloatField',
+    1700: 'DecimalField',
 }
Index: django/forms/__init__.py
===================================================================
--- django/forms/__init__.py	(revision 3355)
+++ django/forms/__init__.py	(working copy)
@@ -736,7 +736,7 @@
         if not 0 <= int(field_data) <= 32767:
             raise validators.CriticalValidationError, gettext("Enter a whole number between 0 and 32,767.")
 
-class FloatField(TextField):
+class DecimalField(TextField):
     def __init__(self, field_name, max_digits, decimal_places, is_required=False, validator_list=None):
         if validator_list is None: validator_list = []
         self.max_digits, self.decimal_places = max_digits, decimal_places
Index: django/core/management.py
===================================================================
--- django/core/management.py	(revision 3355)
+++ django/core/management.py	(working copy)
@@ -757,7 +757,7 @@
                 if field_type == 'CharField' and row[3]:
                     extra_params['maxlength'] = row[3]
 
-                if field_type == 'FloatField':
+                if field_type == 'DecimalField':
                     extra_params['max_digits'] = row[4]
                     extra_params['decimal_places'] = row[5]
 
@@ -831,11 +831,11 @@
                 e.add(opts, '"%s": You can\'t use "id" as a field name, because each model automatically gets an "id" field if none of the fields have primary_key=True. You need to either remove/rename your "id" field or add primary_key=True to a field.' % f.name)
             if isinstance(f, models.CharField) and f.maxlength in (None, 0):
                 e.add(opts, '"%s": CharFields require a "maxlength" attribute.' % f.name)
-            if isinstance(f, models.FloatField):
+            if isinstance(f, models.DecimalField):
                 if f.decimal_places is None:
-                    e.add(opts, '"%s": FloatFields require a "decimal_places" attribute.' % f.name)
+                    e.add(opts, '"%s": DecimalFields require a "decimal_places" attribute.' % f.name)
                 if f.max_digits is None:
-                    e.add(opts, '"%s": FloatFields require a "max_digits" attribute.' % f.name)
+                    e.add(opts, '"%s": DecimalFields require a "max_digits" attribute.' % f.name)
             if isinstance(f, models.FileField) and not f.upload_to:
                 e.add(opts, '"%s": FileFields require an "upload_to" attribute.' % f.name)
             if isinstance(f, models.ImageField):
Index: django/contrib/admin/templatetags/admin_list.py
===================================================================
--- django/contrib/admin/templatetags/admin_list.py	(revision 3355)
+++ django/contrib/admin/templatetags/admin_list.py	(working copy)
@@ -151,8 +151,8 @@
             elif isinstance(f, models.BooleanField) or isinstance(f, models.NullBooleanField):
                 BOOLEAN_MAPPING = {True: 'yes', False: 'no', None: 'unknown'}
                 result_repr = '<img src="%simg/admin/icon-%s.gif" alt="%s" />' % (settings.ADMIN_MEDIA_PREFIX, BOOLEAN_MAPPING[field_val], field_val)
-            # FloatFields are special: Zero-pad the decimals.
-            elif isinstance(f, models.FloatField):
+            # DecimalFields are special: Zero-pad the decimals.
+            elif isinstance(f, models.DecimalField):
                 if field_val is not None:
                     result_repr = ('%%.%sf' % f.decimal_places) % field_val
                 else:
Index: django/contrib/admin/views/doc.py
===================================================================
--- django/contrib/admin/views/doc.py	(revision 3355)
+++ django/contrib/admin/views/doc.py	(working copy)
@@ -297,7 +297,7 @@
     'EmailField'                : _('E-mail address'),
     'FileField'                 : _('File path'),
     'FilePathField'             : _('File path'),
-    'FloatField'                : _('Decimal number'),
+    'DecimalField'              : _('Decimal number'),
     'ForeignKey'                : _('Integer'),
     'ImageField'                : _('File path'),
     'IntegerField'              : _('Integer'),
Index: tests/modeltests/invalid_models/models.py
===================================================================
--- tests/modeltests/invalid_models/models.py	(revision 3355)
+++ tests/modeltests/invalid_models/models.py	(working copy)
@@ -8,7 +8,7 @@
 
 class FieldErrors(models.Model):
     charfield = models.CharField()
-    floatfield = models.FloatField()
+    decimalfield = models.DecimalField()
     filefield = models.FileField()
     prepopulate = models.CharField(maxlength=10, prepopulate_from='bad')
     choices = models.CharField(maxlength=10, choices='bad')
@@ -79,8 +79,8 @@
 
 
 error_log = """invalid_models.fielderrors: "charfield": CharFields require a "maxlength" attribute.
-invalid_models.fielderrors: "floatfield": FloatFields require a "decimal_places" attribute.
-invalid_models.fielderrors: "floatfield": FloatFields require a "max_digits" attribute.
+invalid_models.fielderrors: "decimalfield": DecimalFields require a "decimal_places" attribute.
+invalid_models.fielderrors: "decimalfield": DecimalFields require a "max_digits" attribute.
 invalid_models.fielderrors: "filefield": FileFields require an "upload_to" attribute.
 invalid_models.fielderrors: "prepopulate": prepopulate_from should be a list or tuple.
 invalid_models.fielderrors: "choices": "choices" should be iterable (e.g., a tuple or list).
