From 9bfe533c6967e2813420d75d4830de3923db0627 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Wed, 27 Aug 2003 04:55:52 +0000 Subject: [PATCH] SF bug #795506: Wrong handling of string format code for float values. Adding missing support for '%F'. Will backport to 2.3.1. --- Lib/test/string_tests.py | 1 + Misc/NEWS | 3 +++ Objects/stringobject.c | 3 +++ Objects/unicodeobject.c | 3 +++ 4 files changed, 10 insertions(+) diff --git a/Lib/test/string_tests.py b/Lib/test/string_tests.py index 7c98a3bb8c8..af171d08ab3 100644 --- a/Lib/test/string_tests.py +++ b/Lib/test/string_tests.py @@ -550,6 +550,7 @@ def test_formatting(self): self.checkequal(' 42', '%3ld', '__mod__', 42) self.checkequal('0042.00', '%07.2f', '__mod__', 42) + self.checkequal('0042.00', '%07.2F', '__mod__', 42) self.checkraises(TypeError, 'abc', '__mod__') self.checkraises(TypeError, '%(foo)s', '__mod__', 42) diff --git a/Misc/NEWS b/Misc/NEWS index cc2b858ff5f..a132b13d0c3 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,9 @@ What's New in Python 2.4 alpha 1? Core and builtins ----------------- +- The % formatting operator now supports '%F' which is equivalent to + '%f'. This has always been documented but never implemented. + - complex(obj) could leak a little memory if obj wasn't a string or number. diff --git a/Objects/stringobject.c b/Objects/stringobject.c index 31aeaa7c741..04c9c9887a2 100644 --- a/Objects/stringobject.c +++ b/Objects/stringobject.c @@ -3921,8 +3921,11 @@ PyString_Format(PyObject *format, PyObject *args) case 'e': case 'E': case 'f': + case 'F': case 'g': case 'G': + if (c == 'F') + c = 'f'; pbuf = formatbuf; len = formatfloat(pbuf, sizeof(formatbuf), flags, prec, c, v); diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 163976e952b..7ba9547b1f7 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -6540,8 +6540,11 @@ PyObject *PyUnicode_Format(PyObject *format, case 'e': case 'E': case 'f': + case 'F': case 'g': case 'G': + if (c == 'F') + c = 'f'; pbuf = formatbuf; len = formatfloat(pbuf, sizeof(formatbuf)/sizeof(Py_UNICODE), flags, prec, c, v);