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必须在那里使用一些解决方法。 –