Guest User

Untitled

a guest
Jun 20th, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.81 KB | None | 0 0
  1. library PamPamMath {
  2. function byteToUint(byte b) internal pure returns(uint8) {
  3. return uint8(b) - 48;
  4. }
  5.  
  6. function isDigit(byte b) internal pure returns(bool) {
  7. return b >= 48 && b <= 57;
  8. }
  9.  
  10. function isDot(byte b) internal pure returns(bool) {
  11. return b == 46;
  12. }
  13.  
  14. function isE(byte b) internal pure returns(bool) {
  15. return b == 69 || b == 101;
  16. }
  17.  
  18. function isPlus(byte b) internal pure returns(bool) {
  19. return b == 43;
  20. }
  21.  
  22. function isMinus(byte b) internal pure returns(bool) {
  23. return b == 45;
  24. }
  25.  
  26. enum Part { Int, Fraq, Exp }
  27.  
  28. function parseCoinMarketCurrency(string num) internal pure returns (uint256) {
  29. bytes memory buf = bytes(num);
  30. uint256 result = 0;
  31. Part part = Part.Int;
  32. uint8 fraqLength = 0;
  33. uint8 exp = 0;
  34. bool negExp = false;
  35.  
  36. for(uint i = 0; i < buf.length; i++) {
  37. byte b = buf[i];
  38. if (isDigit(b)) {
  39. if (part == Part.Int || part == Part.Fraq) {
  40. result *= 10;
  41. result += byteToUint(b);
  42. if (part == Part.Fraq) {
  43. fraqLength++;
  44. }
  45. } else {
  46. exp *= 10;
  47. exp += byteToUint(b);
  48. }
  49. } else if (isDot(b)) {
  50. part = Part.Fraq;
  51. } else if (isE(b)) {
  52. part = Part.Exp;
  53. } else if (isMinus(b) && part == Part.Exp) {
  54. negExp = true;
  55. }
  56. }
  57.  
  58. uint256 pow = 0;
  59. if (negExp) {
  60. pow = 18 - fraqLength - exp;
  61. } else {
  62. pow = 18 - fraqLength + exp;
  63. }
  64.  
  65. return result * (10 ** pow);
  66. }
  67. }
Add Comment
Please, Sign In to add comment