Ethereum 以太坊实体的划分

Ethereum 以太坊实体的划分,ethereum,solidity,Ethereum,Solidity,我正在创建一个发行代币的合同。我想一个帐户,持有代币能够检查他们拥有的所有代币发行的百分比。我知道以太坊还没有实现浮点数。我应该怎么做?最好(最低的天然气成本,实现起来很简单)在客户机上执行该计算,而不是在实体上 如果你发现你需要它的坚固性,那么这只是一个通过移动小数点来处理整数的问题。类似于: 例如,此函数用于确定精度等级,并使用一个额外的精度等级正确地进行取整: pragma solidity ^0.4.6; contract Divide { function percent(ui

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

最好(最低的天然气成本,实现起来很简单)在客户机上执行该计算,而不是在实体上

如果你发现你需要它的坚固性,那么这只是一个通过移动小数点来处理整数的问题。类似于:

例如,此函数用于确定精度等级,并使用一个额外的精度等级正确地进行取整:

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);
  }

}
如果你喂它101450,3你得到224,即22.4%


希望能有帮助

这将需要计算合同能够为给定的代币持有人支付多少。例如,如果一个令牌持有者拥有20个令牌,那么总共有100个令牌。合同需要能够确定20个代币的价值占合同总价值的20%。例如,总乙醚可为5 eth。我可以分开吗?这是怎么回事?很公平,不。魏是最小的单位,所以你必须决定如何处理剩余物。如果你想要全精度,那么使用更高精度的用户余额作为状态变量来跟踪分数。。。累积余额足够大时的偶然结算。记住,实际移动一个单位的魏需要消耗天然气,所以考虑一下移动少量魏的效率。好吧,如果你通过20100,3,那么你会得到200-我们称之为“部分”),即千分之200,或20.0%。因此,您可以获得所需的精度。然后,你可以说amountToDivide*部分/1000。1000是3(原始精度)**10。我纠正了函数中的一个疏忽,使其正确地结束。顺便说一句,“转换成十进制”是我在金融界听过的一个缩写。。。意思是乘以100。没什么特别的。此外,关于“安全到”的评论是为了防止您处理的大量数据可能溢出,并导致令人讨厌的事情。溢出。如果该数字对于uint256太大,它将不会抛出。。。它将抛出高阶位并返回一个小数字。为什么你会看到像if(a)这样的例子+b@user5811892值得投一票,如果你觉得有帮助,请接受