Mercurial > babel > mirror
changeset 558:2dd94267e227 stable-0.9.x
merge r611 from trunk
author | fschwarz |
---|---|
date | Tue, 30 Aug 2011 21:06:49 +0000 |
parents | 326511036d21 |
children | 01a75fec90f0 |
files | ChangeLog babel/numbers.py babel/tests/numbers.py |
diffstat | 3 files changed, 29 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Version 0.9.7 +http://svn.edgewall.org/repos/babel/tags/0.9.7/ +(??? ?? 20??, from branches/stable/0.9.x) + * Only use bankers round algorithm as a tie breaker if there are two nearest + numbers, round as usual if there is only one nearest number (#267, patch by + Martin) + + Version 0.9.6 http://svn.edgewall.org/repos/babel/tags/0.9.6/ (Mar 17 2011, from branches/stable/0.9.x)
--- a/babel/numbers.py +++ b/babel/numbers.py @@ -363,6 +363,13 @@ add = 1 elif digits[i] == '5' and digits[i-1] in '13579': add = 1 + elif digits[i] == '5': # previous digit is even + # We round up unless all following digits are zero. + for j in xrange(i + 1, len(digits)): + if digits[j] != '0': + add = 1 + break + scale = 10**ndigits if have_decimal and isinstance(value, Decimal): return Decimal(int(value * scale + add)) / scale * sign
--- a/babel/tests/numbers.py +++ b/babel/tests/numbers.py @@ -143,10 +143,24 @@ self.assertEqual(fmt, '0E0') +class BankersRoundTestCase(unittest.TestCase): + def test_round_to_nearest_integer(self): + self.assertEqual(1, numbers.bankersround(0.5001)) + + def test_round_to_even_for_two_nearest_integers(self): + self.assertEqual(0, numbers.bankersround(0.5)) + self.assertEqual(2, numbers.bankersround(1.5)) + self.assertEqual(-2, numbers.bankersround(-2.5)) + + self.assertEqual(0, numbers.bankersround(0.05, ndigits=1)) + self.assertEqual(0.2, numbers.bankersround(0.15, ndigits=1)) + + def suite(): suite = unittest.TestSuite() suite.addTest(doctest.DocTestSuite(numbers)) suite.addTest(unittest.makeSuite(FormatDecimalTestCase)) + suite.addTest(unittest.makeSuite(BankersRoundTestCase)) return suite if __name__ == '__main__':