odps-sdk/odps-sdk-core/src/main/java/com/aliyun/odps/tunnel/hasher/DefaultHashFactory.java [410:452]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      input = input.trim();
      int len = input.length();
      int ptr = 0;

      // check negative
      boolean isNegative = false;
      if (len > 0) {
        if (input.charAt(ptr) == '-') {
          isNegative = true;
          ptr++;
          len--;
        } else if (input.charAt(ptr) == '+') {
          ptr++;
          len--;
        }
      }

      // ignore leading zeros
      while (len > 0 && input.charAt(ptr) == '0') {
        ptr++;
        len--;
      }

      // check decimal format and analyze precison and scale
      int valueScale = 0;
      boolean foundDot = false;
      boolean foundExponent = false;
      for (int i = 0; i < len; i++) {
        char c = input.charAt(ptr + i);
        if (Character.isDigit(c)) {
          if (foundDot) {
            valueScale++;
          }
        } else if (c == '.' && !foundDot) {
          foundDot = true;
        } else if ((c == 'e' || c == 'E') && i + 1 < len) {
          foundExponent = true;
          int exponent = Integer.parseInt(input.substring(ptr + i + 1));
          valueScale -= exponent;
          len = ptr + i;
          break;
        } else {
          throw new IllegalArgumentException("Invalid decimal format: " + input);
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



odps-sdk/odps-sdk-core/src/main/java/com/aliyun/odps/tunnel/hasher/LegacyHashFactory.java [362:404]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      input = input.trim();
      int len = input.length();
      int ptr = 0;

      // check negative
      boolean isNegative = false;
      if (len > 0) {
        if (input.charAt(ptr) == '-') {
          isNegative = true;
          ptr++;
          len--;
        } else if (input.charAt(ptr) == '+') {
          ptr++;
          len--;
        }
      }

      // ignore leading zeros
      while (len > 0 && input.charAt(ptr) == '0') {
        ptr++;
        len--;
      }

      // check decimal format and analyze precison and scale
      int valueScale = 0;
      boolean foundDot = false;
      boolean foundExponent = false;
      for (int i = 0; i < len; i++) {
        char c = input.charAt(ptr + i);
        if (Character.isDigit(c)) {
          if (foundDot) {
            valueScale++;
          }
        } else if (c == '.' && !foundDot) {
          foundDot = true;
        } else if ((c == 'e' || c == 'E') && i + 1 < len) {
          foundExponent = true;
          int exponent = Integer.parseInt(input.substring(ptr + i + 1));
          valueScale -= exponent;
          len = ptr + i;
          break;
        } else {
          throw new IllegalArgumentException("Invalid decimal format: " + input);
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



