Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

Ticket 18800: Template cannot format integers bigger than maximum float #358

Closed
wants to merge 2 commits into from

2 participants

Brad Pitcher Florian Apolloner
Brad Pitcher

https://code.djangoproject.com/ticket/18800

This pull includes a fixed version of the original patch, plus tests which fail before patching and pass afterward.

Florian Apolloner
Owner

Fixed in 319e135. Thanks!

Florian Apolloner apollo13 closed this
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Sep 8, 2012
  1. Brad Pitcher

    fix patch contributed by jbvsmo

    brad authored
  2. Brad Pitcher

    numberformat tests for #18800

    brad authored
This page is out of date. Refresh to see the latest.
7 django/utils/numberformat.py
View
@@ -21,12 +21,10 @@ def format(number, decimal_sep, decimal_pos=None, grouping=0, thousand_sep='',
if isinstance(number, int) and not use_grouping and not decimal_pos:
return mark_safe(six.text_type(number))
# sign
- if float(number) < 0:
- sign = '-'
- else:
- sign = ''
+ sign = ''
str_number = six.text_type(number)
if str_number[0] == '-':
+ sign = '-'
str_number = str_number[1:]
# decimal part
if '.' in str_number:
@@ -48,4 +46,3 @@ def format(number, decimal_sep, decimal_pos=None, grouping=0, thousand_sep='',
int_part_gd += digit
int_part = int_part_gd[::-1]
return sign + int_part + dec_part
-
47 tests/regressiontests/utils/numberformat.py
View
@@ -0,0 +1,47 @@
+from unittest import TestCase
+from django.utils.numberformat import format as nformat
+from sys import float_info
+
+
+class TestNumberFormat(TestCase):
+
+ def test_format_number(self):
+ self.assertEqual(nformat(1234, '.'), '1234')
+ self.assertEqual(nformat(1234.2, '.'), '1234.2')
+ self.assertEqual(nformat(1234, '.', decimal_pos=2), '1234.00')
+ self.assertEqual(nformat(1234, '.', grouping=2, thousand_sep=','),
+ '1234')
+ self.assertEqual(nformat(1234, '.', grouping=2, thousand_sep=',',
+ force_grouping=True), '12,34')
+ self.assertEqual(nformat(-1234.33, '.', decimal_pos=1), '-1234.3')
+
+ def test_format_string(self):
+ self.assertEqual(nformat('1234', '.'), '1234')
+ self.assertEqual(nformat('1234.2', '.'), '1234.2')
+ self.assertEqual(nformat('1234', '.', decimal_pos=2), '1234.00')
+ self.assertEqual(nformat('1234', '.', grouping=2, thousand_sep=','),
+ '1234')
+ self.assertEqual(nformat('1234', '.', grouping=2, thousand_sep=',',
+ force_grouping=True), '12,34')
+ self.assertEqual(nformat('-1234.33', '.', decimal_pos=1), '-1234.3')
+
+ def test_large_number(self):
+ most_max = ('{0}179769313486231570814527423731704356798070567525844996'
+ '598917476803157260780028538760589558632766878171540458953'
+ '514382464234321326889464182768467546703537516986049910576'
+ '551282076245490090389328944075868508455133942304583236903'
+ '222948165808559332123348274797826204144723168738177180919'
+ '29988125040402618412485836{1}')
+ most_max2 = ('{0}35953862697246314162905484746340871359614113505168999'
+ '31978349536063145215600570775211791172655337563430809179'
+ '07028764928468642653778928365536935093407075033972099821'
+ '15310256415249098018077865788815173701691026788460916647'
+ '38064458963316171186642466965495956524082894463374763543'
+ '61838599762500808052368249716736')
+ int_max = int(float_info.max)
+ self.assertEqual(nformat(int_max, '.'), most_max.format('', '8'))
+ self.assertEqual(nformat(int_max + 1, '.'), most_max.format('', '9'))
+ self.assertEqual(nformat(int_max * 2, '.'), most_max2.format(''))
+ self.assertEqual(nformat(0 - int_max, '.'), most_max.format('-', '8'))
+ self.assertEqual(nformat(-1 - int_max, '.'), most_max.format('-', '9'))
+ self.assertEqual(nformat(-2 * int_max, '.'), most_max2.format('-'))
1  tests/regressiontests/utils/tests.py
View
@@ -21,6 +21,7 @@
from .ipv6 import TestUtilsIPv6
from .jslex import JsToCForGettextTest, JsTokensTest
from .module_loading import CustomLoader, DefaultLoader, EggLoader
+from .numberformat import TestNumberFormat
from .os_utils import SafeJoinTests
from .regex_helper import NormalizeTests
from .simplelazyobject import TestUtilsSimpleLazyObject
Something went wrong with that request. Please try again.