14

我正在创建一个发行代币的合约。我想要一个持有代币的账户,以便能够检查他们在所有已发行代币中拥有的百分比。我知道以太坊还没有实现浮点数。我应该怎么办?

4

1 回答 1

23

在客户端而不是在 Solidity 中执行该计算可能是最好的(最低的 gas 成本且易于实施)。

如果您发现在 Solidity 中需要它,那么只需通过移动小数点来处理整数。类似于:https ://en.wikipedia.org/wiki/Parts-per_notation

例如,此函数让您决定精确度并使用额外的精确度来正确舍入:

pragma solidity ^0.4.6;

contract Divide {

  function percent(uint numerator, uint denominator, uint precision) public 

  constant returns(uint quotient) {

         // caution, check safe-to-multiply here
        uint _numerator  = numerator * 10 ** (precision+1);
        // with rounding of last digit
        uint _quotient =  ((_numerator / denominator) + 5) / 10;
        return ( _quotient);
  }

}

如果你喂它 101,450, 3 你得到 224,即 22.4%。

希望能帮助到你。

于 2017-03-11T19:49:01.930 回答