以太坊 Solidity 的分裂
Division in Ethereum Solidity
我正在创建一个发行代币的合约。我希望持有代币的帐户能够检查他们拥有的所有已发行代币的百分比。我知道以太坊还没有实现浮点数。我该怎么办?
在客户端而不是在 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%。
希望对您有所帮助。
我正在创建一个发行代币的合约。我希望持有代币的帐户能够检查他们拥有的所有已发行代币的百分比。我知道以太坊还没有实现浮点数。我该怎么办?
在客户端而不是在 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%。
希望对您有所帮助。