Solidity

不能做任何整數除法

  • October 15, 2021

我正在建構一個新的智能合約,但真的不知道如何執行整數除法。我知道還沒有實現定點數,但至少應該可以執行 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 和可選的餘數。

希望能幫助到你。

引用自:https://ethereum.stackexchange.com/questions/15090