До сих пор она работала нормально: уже зарегистрировано более 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)
Подробнее здесь: https://stackoverflow.com/questions/790 ... s-properly