Solidity
不能做任何整數除法
我正在建構一個新的智能合約,但真的不知道如何執行整數除法。我知道還沒有實現定點數,但至少應該可以執行 100/3 = 33。
我希望有一個人可以幫助我。我見過多個例子,他們談論四捨五入的整數除法,但似乎無法執行它。
乾杯,雨果
問題是 4 和 5 適合少於 256 位(每個)。你最終會在常量表達式中得到微小的 uint,然後這些就不容易轉換為 uint256,所以……顯式地轉換類型。
uint x = uint(4)/uint(5);
外賣對常量要小心,因為它們可能會被轉換成意想不到的類型。
一個粗略的想法:
contract Divide { function getDivided(uint numerator, uint denominator) public constant returns(uint quotient, uint remainder) { quotient = numerator / denominator; remainder = numerator - denominator * quotient; } }
還可以在 Zeppelin 上查看帶有“safeDiv()”的“SafeMath”:https ://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/SafeMath.sol
此外,由於 4/5 顯然可以計算為 0 餘數 4,因此您的目標可能真的是 80%?
您可以通過使用金融市場中常見的“十進制”來提高準確性。你傳遞對,數字和小數偏移量。
因此,1.234 將寫為
$$ 1234, 3 $$3 表示第三個位置有小數。 在這種情況下,您將計算 80,有2個小數位(意思是 0.80)。
4 * 10 ** 2 = 400, 400/5 = 80,我們將 4 提高了 10 ^ 2,所以返回 … 80,2 和可選的餘數。
希望能幫助到你。