docs: public static Double parseDouble(String source) {
          ArrayList<Character> separators = new ArrayList<Character>();
          ArrayList<StringBuilder> pieces = new ArrayList<StringBuilder>();
  	    char[] cSource = source.toCharArray();
          int l = cSource.length;
          StringBuilder finalVal = new StringBuilder();
          StringBuilder piece;
          int pieceIndex = 0;
  
          pieces.add(new StringBuilder());
          piece = pieces.get(pieceIndex);
          LOG.debug("Starting converstion String -> double");
          for (int i=0; i<l; i++) {
              if (! Character.isDigit(cSource[i])) {
                  if (! separators.contains(cSource[i])) {
                      separators.add(cSource[i]);
                  }
                  pieceIndex++;
                  pieces.add(new StringBuilder());
                  piece = pieces.get(pieceIndex);
              } else {
                  piece.append(cSource[i]);
              }
          }
          if (separators.size() > 2) {
              throw new NumberFormatException();
          } 
          LOG.debug("separators: "+separators.toString());
          LOG.debug("pieces: "+pieces.toString());
          if (separators.size() == 0) {
              // There should only be one entry anyways.
              finalVal.append(pieces.get(0).toString());
              finalVal.append(".0");
          } else {
              // Handle thousands only separators (no decimal piece)
              if (separators.size() == 1 && ((pieces.size() > 2) || pieces.size() == 1)) {
                  for (StringBuilder integerPiece: pieces) {
                      finalVal.append(integerPiece.toString());
                  }
                  finalVal.append(".0");
              } else {
                  String decimalPiece = (pieces.remove(pieces.size()-1)).toString();
                  for (StringBuilder integerPiece: pieces) {
                      finalVal.append(integerPiece.toString());
                  }
                  finalVal.append(".");
                  finalVal.append(decimalPiece);
              }
          }
          LOG.debug("Final value: "+finalVal.toString());
          return Double.parseDouble(finalVal.toString());
  	}