Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixes #3176, #3004 -- Added an argument to the floatfilter to allow u…

…sers to specify precision of floats, Thanks, Eric Floehr.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@4274 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit c3f891210a05a9593e3df4cb04dfda7442af2065 1 parent 9e0c5d1
@freakboy3742 freakboy3742 authored
View
1  AUTHORS
@@ -78,6 +78,7 @@ answer newbie questions, and generally made Django that much better:
Clint Ecker
Enrico <rico.bl@gmail.com>
favo@exoweb.net
+ Eric Floehr <eric@intellovations.com>
gandalf@owca.info
Baishampayan Ghose
martin.glueck@gmail.com
View
32 django/template/defaultfilters.py
@@ -27,20 +27,38 @@ def fix_ampersands(value):
from django.utils.html import fix_ampersands
return fix_ampersands(value)
-def floatformat(text):
- """
- Displays a floating point number as 34.2 (with one decimal place) -- but
- only if there's a point to be displayed
+def floatformat(text, arg=-1):
+ """
+ If called without an argument, displays a floating point
+ number as 34.2 -- but only if there's a point to be displayed.
+ With a positive numeric argument, it displays that many decimal places
+ always.
+ With a negative numeric argument, it will display that many decimal
+ places -- but only if there's places to be displayed.
+ Examples:
+ num1 = 34.23234
+ num2 = 34.00000
+ num1|floatformat results in 34.2
+ num2|floatformat is 34
+ num1|floatformat:3 is 34.232
+ num2|floatformat:3 is 34.000
+ num1|floatformat:-3 is 34.232
+ num2|floatformat:-3 is 34
"""
try:
f = float(text)
except ValueError:
return ''
+ try:
+ d = int(arg)
+ except ValueError:
+ return str(f)
m = f - int(f)
- if m:
- return '%.1f' % f
- else:
+ if not m and d < 0:
return '%d' % int(f)
+ else:
+ formatstr = '%%.%df' % abs(d)
+ return formatstr % f
def linenumbers(value):
"Displays text with line numbers"
View
22 docs/templates.txt
@@ -924,13 +924,31 @@ Replaces ampersands with ``&amp;`` entities.
floatformat
~~~~~~~~~~~
-Rounds a floating-point number to one decimal place -- but only if there's a
-decimal part to be displayed. For example:
+When used without an argument, rounds a floating-point number to one decimal
+place -- but only if there's a decimal part to be displayed. For example:
* ``36.123`` gets converted to ``36.1``
* ``36.15`` gets converted to ``36.2``
* ``36`` gets converted to ``36``
+**New in Django development version**
+
+If used with a numeric integer argument, ``floatformat`` rounds a number to that
+many decimal places. For example:
+
+ * ``36.1234`` with floatformat:3 gets converted to ``36.123``
+ * ``36`` with floatformat:4 gets converted to ``36.0000``
+
+If the argument passed to ``floatformat`` is negative, it will round a number to
+that many decimal places -- but only if there's a decimal part to be displayed.
+For example:
+
+ * ``36.1234`` with floatformat:-3 gets converted to ``36.123``
+ * ``36`` with floatformat:-4 gets converted to ``36``
+
+Using ``floatformat`` with no argument is equivalent to using ``floatformat`` with
+an argument of ``-1``.
+
get_digit
~~~~~~~~~
View
20 tests/regressiontests/defaultfilters/tests.py
@@ -11,6 +11,26 @@
'0.0'
>>> floatformat(0.0)
'0'
+>>> floatformat(7.7,3)
+'7.700'
+>>> floatformat(6.000000,3)
+'6.000'
+>>> floatformat(13.1031,-3)
+'13.103'
+>>> floatformat(11.1197, -2)
+'11.12'
+>>> floatformat(11.0000, -2)
+'11'
+>>> floatformat(11.000001, -2)
+'11.00'
+>>> floatformat(8.2798, 3)
+'8.280'
+>>> floatformat('foo')
+''
+>>> floatformat(13.1031, 'bar')
+'13.1031'
+>>> floatformat('foo', 'bar')
+''
>>> addslashes('"double quotes" and \'single quotes\'')
'\\"double quotes\\" and \\\'single quotes\\\''
Please sign in to comment.
Something went wrong with that request. Please try again.