Ответ на ваш первый вопрос: да, round
было исправлено в Python 2.7.
Ответ на ваш второй вопрос: я не уверен, если не считать фактического использования более раннего Python (2.6 все еще должен демонстрировать поведение 2.4). В данном конкретном случае ваша ценность неотличима от 1480,395 и 1480,395 (для нас, базовых 10 человек) раундов до 1480,40. Итак, я полагаю, вы могли бы сначала попытаться округлить в одно место сверх того, что вы действительно хотите, превратить это в строку, а затем получить десятичное число из этого ... но извините, я не могу думать ни о чем, кроме десятичного. Если я подумаю о чем-то (до того, как кто-то еще напишет что-нибудь получше), я вернусь и отредактирую.
(Но разве Десятичность так сложно использовать?)
Редактировать: Вот пример использования десятичного числа:
>>> from decimal import Decimal
>>> f = Decimal('1480.395')
>>> f.quantize(Decimal('0.00'))
Decimal('1480.40')
>>> float(Decimal('1480.40'))
1480.4
Некоторые заметки:
Python 2.7 позволяет использовать числа с плавающей запятой в качестве входных данных для десятичного числа. Не делайте этого , поскольку вы вернетесь туда, откуда начали. Кроме того, не используйте встроенную функцию round
для десятичного числа, потому что эта функция преобразует ваше десятичное число обратно в число с плавающей точкой, и, таким образом, вы вернетесь туда, откуда начали. В своей простейшей форме десятичное число quantize
принимает другое десятичное число, имеющее количество десятичных разрядов, которое вы действительно хотите (представьте его как шаблон для округления). Если ваши данные обязательно должны быть плавающими, то конвертируйте их обратно в плавающие только после выполнения всех ваших десятичных вычислений.
Наконец: я не уверен, что это покрывает все возможные странные случаи в поведении Python 2.4. Если вы полагаетесь на точно поведение Python 2.4, может не быть замены для работы на Python 2.4. То, что я описал выше, лишь на один шаг ближе к округлению в человеческом стиле.