Solidity
計算百分比
我想計算每天的使用者獎勵。
uint256 totalBalance = 111; uint256 rewardPerDay = 1000; function calculateReward(uint256 userBalance) public view returns (uint256) { uint256 poolShare = userBalance * 1000 / totalBalance; uint256 reward = poolShare * rewardPerDay / (1000); return reward; }
問題是,如果
1號使用者userBalance = 28,poolShare = 25.22%,reward = 252
使用者 2 userBalance = 83 ,poolShare = 74,77% ,reward = 747
剩餘 1個代幣,1000 - (252 + 747) = 1;
我該如何解決這個問題?2號使用者應該收到748,1號使用者應該收到252
這種舍入問題在加密項目中非常典型。你有兩個選擇:1)嘗試決定誰應該得到更多(或更少)2)用剩菜做其他事情(也稱為灰塵)。
通常,開始計算誰應該得到更多是不值得的——尤其是在 Solidity 中的計算不准確(由於沒有小數)。所以發生的情況是,通常項目只是簡單地收集灰塵並將其用於其他用途。也許他們以某種方式將其返還給使用者,將其作為內部費用保留或用於某些原因。灰塵通常很小,對使用者來說並不重要。