Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- library PamPamMath {
- function byteToUint(byte b) internal pure returns(uint8) {
- return uint8(b) - 48;
- }
- function isDigit(byte b) internal pure returns(bool) {
- return b >= 48 && b <= 57;
- }
- function isDot(byte b) internal pure returns(bool) {
- return b == 46;
- }
- function isE(byte b) internal pure returns(bool) {
- return b == 69 || b == 101;
- }
- function isPlus(byte b) internal pure returns(bool) {
- return b == 43;
- }
- function isMinus(byte b) internal pure returns(bool) {
- return b == 45;
- }
- enum Part { Int, Fraq, Exp }
- function parseCoinMarketCurrency(string num) internal pure returns (uint256) {
- bytes memory buf = bytes(num);
- uint256 result = 0;
- Part part = Part.Int;
- uint8 fraqLength = 0;
- uint8 exp = 0;
- bool negExp = false;
- for(uint i = 0; i < buf.length; i++) {
- byte b = buf[i];
- if (isDigit(b)) {
- if (part == Part.Int || part == Part.Fraq) {
- result *= 10;
- result += byteToUint(b);
- if (part == Part.Fraq) {
- fraqLength++;
- }
- } else {
- exp *= 10;
- exp += byteToUint(b);
- }
- } else if (isDot(b)) {
- part = Part.Fraq;
- } else if (isE(b)) {
- part = Part.Exp;
- } else if (isMinus(b) && part == Part.Exp) {
- negExp = true;
- }
- }
- uint256 pow = 0;
- if (negExp) {
- pow = 18 - fraqLength - exp;
- } else {
- pow = 18 - fraqLength + exp;
- }
- return result * (10 ** pow);
- }
- }
Add Comment
Please, Sign In to add comment