Ответ 1
Я предполагаю, что вы говорите о Python. http://code.google.com/p/python-money/ "Примитивы для работы с деньгами и валютами в Python" - название самоочевидно:)
Какой класс следует использовать для представления денег, чтобы избежать большинства ошибок округления?
Должен ли я использовать Decimal
или простой встроенный number
?
Существует ли какой-либо существующий класс Money
с поддержкой преобразования валюты, который я мог бы использовать?
Любые ошибки, которых я должен избегать?
Я предполагаю, что вы говорите о Python. http://code.google.com/p/python-money/ "Примитивы для работы с деньгами и валютами в Python" - название самоочевидно:)
Никогда не используйте число с плавающей запятой, чтобы представлять деньги. Плавающие числа не представляют цифры в десятичных обозначениях точно. Вы закончите с кошмаром сложных ошибок округления и не сможете надежно конвертировать между валютами. См. короткое эссе Мартина Фаулера по этому вопросу.
Если вы решили написать свой собственный класс, я рекомендую использовать его в типе decimal.
Я не думаю, что python-money - хороший вариант, потому что он не поддерживался в течение довольно долгого времени, а его исходный код имеет какой-то странный и бесполезный код, и обмен валюты просто сломан.
Попробуйте py-moneyed. Это улучшение по сравнению с деньгами python.
Просто используйте decimal.
Вам может быть интересно QuantLib для работы с финансами.
Он построил классы для обработки типов валют и претензий на 4 года активного развития.
Вы могли бы посмотреть на эту библиотеку: python-money. Поскольку у меня нет опыта с этим, я не могу прокомментировать его полезность.
"Трюк", который вы могли бы использовать для обработки валюты в виде целых чисел:
Простая, легкая, но расширяемая идея:
class Money():
def __init__(self, value):
# internally use Decimal or cents as long
self._cents = long(0)
# Now parse 'value' as needed e.g. locale-specific user-entered string, cents, Money, etc.
# Decimal helps in conversion
def as_my_app_specific_protocol(self):
# some application-specific representation
def __str__(self):
# user-friendly form, locale specific if needed
# rich comparison and basic arithmetics
def __lt__(self, other):
return self._cents < Money(other)._cents
def __add__(self, other):
return Money(self._cents + Money(other)._cents)
Вы можете: