web-dev-qa-db-ja.com

イーサリアムソリディティの分割

トークンを発行するコントラクトを作成しています。トークンを保持しているアカウントで、発行されたすべてのトークンのうち、所有している割合を確認できるようにしたいと思います。イーサリアムはまだ浮動小数点数を実装していないことを知っています。私は何をすべきか?

8
GK1

Solidityではなく、クライアントでその計算を実行するのがおそらく最善です(ガスコストが最も低く、実装は簡単です)。

Solidityで必要な場合は、小数点をシフトして整数を操作するだけです。類似: https://en.wikipedia.org/wiki/Parts-per_notation

たとえば、この関数を使用すると、精度の程度を決定し、さらに1つの精度を使用して正しく切り上げることができます。

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%になります。

それが役に立てば幸い。

12