Как Python babel закръгля числа?

Създавам финансов уебсайт с рамката на Flask и в момента пиша модулни тестове за него. Използвам пакета Babel за форматиране на парични суми и попаднах на доста странно поведение на закръгляване. Бих очаквал закръгляването да е нагоре в случай на 5 или поне да е последователно. Но вижте това:

>>> from decimal import Decimal
>>> from babel.numbers import format_currency
>>> print format_currency(Decimal('.235'), 'EUR', locale='nl_NL')
€ 0,24
>>> print format_currency(Decimal('.245'), 'EUR', locale='nl_NL')
€ 0,24

Защо това е така и по-важното; как мога да разреша това?

ps: Бих предпочел .245 да се закръгли до .25

[РЕДАКТИРАНЕ]

Търсих източника, който препраща към някои други части на код. Но наистина не мога да разбера какво не е наред там и защо изглежда, че произволно закръгля нагоре или надолу. Някой някаква идея?


person kramer65    schedule 11.02.2015    source източник
comment
Звучи като закръгляване на банкери: en.wikipedia.org/wiki/Rounding#Round_half_to_even   -  person FatalError    schedule 11.02.2015


Отговори (1)


Ако следвате кода до apply, можете да видите препратка към bankersround процедура, която ни казва какво трябва да знаем. Бабел използва метода на закръгляне на банкерите, който закръглява до най-близкото четно число на 5. И така, .245 и .235 закръглят до .24, тъй като .24 е най-близката четна стойност за всяко. Стойности над и под 5 закръглят нормално.

person paidhima    schedule 11.02.2015