1
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)
可以看出,玩家有10k現金,我減去10k,這會導致負值,我該如何解決這個問題?我不會讓現金成爲負數,因爲你可以預期。我在做主要錯誤的事情嗎?Django十進制精度損失
我希望玩家能夠用他的錢全押。
什麼是'user.profile.cash'? –
也許'F()'表達式將小數轉換爲浮點數?值「-1.1819E-12」是一個浮點數。 –
您使用的是哪個數據庫後端?這可能是一個特定於數據庫的問題。例如,SQLlite沒有原生的十進制字段。 Django必須在那裏使用一些解決方法。 –