worth = Decimal(request.POST.get('worth'))
print(request.user.profile.cash) # -> prints 10000.000000000000000
print(worth) # -> prints 10000
Profile.objects.filter(user=request.user).update(cash=F('cash')-worth)
request.user.profile.refresh_from_db()
if request.user.profile.cash < 0:
###!!!!####
print(request.user.profile.cash) # -> -1.819E-12
#model definition:
class Profile(models.Model):
cash = models.DecimalField(default=10000, max_digits=30, decimal_places=15)
comme on peut le voir, le joueur a 10k comptant et je soustrais 10k, ce qui entraîne des valeurs négatives, comment puis-je résoudre ce problème? Je ne permets pas que l'argent soit négatif comme on peut s'y attendre. Est-ce que je fais quelque chose qui ne va pas?Django perte de précision décimale
Je veux que le joueur puisse aller all-in avec son argent.
Qu'est-ce que 'user.profile.cash'? –
Peut-être que l'expression 'F()' convertit implicitement la décimale en un nombre à virgule flottante? La valeur '-1.1819E-12' est un nombre à virgule flottante. –
Quel backend de base de données utilisez-vous? Cela peut être un problème spécifique à la base de données. Par exemple, SQLlite n'a pas de champ décimal natif. Django doit utiliser une solution de contournement. –