Как правильно обращаться с валютными ценностями?Python

Программы на Python
Anonymous
Как правильно обращаться с валютными ценностями?

Сообщение Anonymous »

У меня есть система, в которой все суммы транзакций хранятся в целых числах (центах).
До сих пор она работала нормально: уже зарегистрировано более 20 миллионов транзакций.
Однако недавно я столкнулся со случаем использования, когда эквивалентное целое значение становится нулевым после преобразования в центы, что приводит к проблемам с небольшими суммами

Код: Выделить всё

# Models
class Wallet(models.Model):
balance = models.IntegerField()

class WalletTransaction(models.Model):
wallet = models.ForeignKey(Wallet, on_delete=models.CASCADE)
amount = models.IntegerField()  # Stored in cents
transaction_type = models.CharField(max_length=50)

# Updating wallet balance and creating transaction
cost_price = 0.0025
cost_price_in_cents = cost_price * 100  # Converts to 0.25 cents
wallet = Wallet.objects.get(id=1)
wallet.balance -= cost_price_in_cents
wallet.save()
WalletTransaction.objects.create(wallet=wallet, amount=cost_price_in_cents)
Здесь баланс списывается на 0,25, но в истории транзакций кошелька он равен 0.

Подробнее здесь: https://stackoverflow.com/questions/790 ... s-properly

Вернуться в «Python»