diff --git a/Lib/test/test_long.py b/Lib/test/test_long.py
index 2c9e2d0..8eb09d1 100644
--- a/Lib/test/test_long.py
+++ b/Lib/test/test_long.py
@@ -530,17 +530,23 @@
         self.assertRaises(ValueError, format, 3, "1.3")  # precision disallowed
         self.assertRaises(ValueError, format, 3, "+c")   # sign not allowed
                                                          # with 'c'
-        # other format specifiers shouldn't work on ints,
-        #  in particular float and string specifiers
+
+        # ensure that only int and float type specifiers work
         for format_spec in ([chr(x) for x in range(ord('a'), ord('z')+1)] +
                             [chr(x) for x in range(ord('A'), ord('Z')+1)]):
-            if not format_spec in 'bcdoxX':
+            if not format_spec in 'bcdoxXeEfFgGn%':
                 self.assertRaises(ValueError, format, 0, format_spec)
                 self.assertRaises(ValueError, format, 1, format_spec)
                 self.assertRaises(ValueError, format, -1, format_spec)
                 self.assertRaises(ValueError, format, 2**100, format_spec)
                 self.assertRaises(ValueError, format, -(2**100), format_spec)
 
+        # ensure that float type specifiers work; format converts
+        #  the int to a float
+        for format_spec in 'eEfFgGn%':
+            for value in [0, 1, -1, 100, -100, 1234567890, -1234567890]:
+                self.assertEqual(format(value, format_spec),
+                                 format(float(value), format_spec))
 
     def test_nan_inf(self):
         self.assertRaises(OverflowError, int, float('inf'))
diff --git a/Objects/stringlib/formatter.h b/Objects/stringlib/formatter.h
index 49b3566..2ff7290 100644
--- a/Objects/stringlib/formatter.h
+++ b/Objects/stringlib/formatter.h
@@ -764,7 +764,6 @@
 FORMAT_STRING(PyObject* value, PyObject* args)
 {
     PyObject *format_spec;
-    PyObject *tmp = NULL;
     PyObject *result = NULL;
     InternalFormatSpec format;
 
@@ -796,7 +795,6 @@
     }
 
 done:
-    Py_XDECREF(tmp);
     return result;
 }
 
@@ -834,6 +832,21 @@
         result = format_long_internal(value, &format);
         break;
 
+    case 'e':
+    case 'E':
+    case 'f':
+    case 'F':
+    case 'g':
+    case 'G':
+    case 'n':
+    case '%':
+        /* convert to float */
+        tmp = PyNumber_Float(value);
+        if (tmp == NULL)
+            goto done;
+        result = format_float_internal(value, &format);
+        break;
+
     default:
         /* unknown */
         PyErr_Format(PyExc_ValueError, "Unknown conversion type %c",
@@ -851,7 +864,6 @@
 {
     PyObject *format_spec;
     PyObject *result = NULL;
-    PyObject *tmp = NULL;
     InternalFormatSpec format;
 
     if (!PyArg_ParseTuple(args, STRINGLIB_PARSE_CODE ":__format__", &format_spec))
@@ -890,6 +902,5 @@
     }
 
 done:
-    Py_XDECREF(tmp);
     return result;
 }
