diff --git a/django/core/template/defaultfilters.py b/django/core/template/defaultfilters.py index 746fa9b873..37e79ece3f 100644 --- a/django/core/template/defaultfilters.py +++ b/django/core/template/defaultfilters.py @@ -24,15 +24,15 @@ def fix_ampersands(value, _): def floatformat(text, _): """ - Displays a floating point number as 34.2 (with one decimal place) - but + Displays a floating point number as 34.2 (with one decimal place) -- but only if there's a point to be displayed """ - from math import modf - if not text: - return '' - if modf(float(text))[0] < 0.1: - return text - return "%.1f" % float(text) + f = float(text) + m = f - int(f) + if m: + return '%.1f' % f + else: + return '%d' % int(f) def linenumbers(value, _): "Displays text with line numbers" diff --git a/tests/othertests/defaultfilters.py b/tests/othertests/defaultfilters.py new file mode 100644 index 0000000000..d440e25dd5 --- /dev/null +++ b/tests/othertests/defaultfilters.py @@ -0,0 +1,20 @@ +""" +>>> floatformat(7.7, None) +'7.7' +>>> floatformat(7.0, None) +'7' +>>> floatformat(0.7, None) +'0.7' +>>> floatformat(0.07, None) +'0.1' +>>> floatformat(0.007, None) +'0.0' +>>> floatformat(0.0, None) +'0' +""" + +from django.core.template.defaultfilters import * + +if __name__ == '__main__': + import doctest + doctest.testmod()