我的本地机器与Heroku服务器上的十进制计算不同



我有一个Django项目,我部署到Heroku。我注意到,由于某种原因,当我使用较小的数字时,计算不工作。在我的本地Windows机器上一切正常。

例如这个计算newBalance = Decimal(str(userObj.user_coins)) - Decimal(str(betValue)),当计算是2000 - 12时,我得到的答案是2.0E+3而不是1988。如果计算是2000 - 120,我得到的答案是1900或1.9E+3,而不是1880。在我的本地机器上,这是正常工作的。

我不明白这里出了什么问题。

//Template script
$('.bet-submit').click(function() {
const betValue = document.getElementById('bet-value').value

betSocket.send(JSON.stringify({
'id': id,
'betValue': betValue
}))
})
betSocket.onmessage = function(e) {
const data = JSON.parse(e.data)
update_coins()
for(const key in data.bets){
document.querySelector('#bets').innerHTML += '<span>' +data.bets[key].bet_value +'$</span>'
}
}
function update_coins() {
$.ajax({
method: "POST",
headers: { "X-CSRFToken": token },
url: "/api/coins/",
data: {},
success: function(data) {
document.querySelector('#user_coins').innerHTML = data.coins
}
})
};
//consumers.py
async def receive(self, text_data):
id= data['id']
betValue = data['betValue']
await save_bet(id, betValue)
bets = await get_bets(round)
await self.channel_layer.group_send(
self.room_group_name,
{
'type': 'send_bet',
'bets': bets
}
)

@database_sync_to_async
def save_bet(id, betValue):
userObj = CustomUser.objects.filter(steam_id=steamid)[0]
newBalance = userObj.user_coins - Decimal(betValue)
print(newBalance) // 2.0E+3
CustomUser.objects.filter(steam_id=steamid).update(user_coins=newBalance)
...

@database_sync_to_async
def get_bets(round):
...
bets = {}
for idx, bet in enumerate(betsObj):
bets[str(idx)] = {}
bets[str(idx)].update({
...,
'bet_value': str(bet.bet_value),
})
return bets

我认为你最好使用float而不是Decimal

newBalance = float(str(userObj.user_coins)) - float(str(betValue))

最新更新