public BigDecimal (String num) throws NumberFormatException
public BigDecimal (BigInteger num)
  public BigDecimal (String num) throws NumberFormatException   {    int len = num.length();    int start = 0, point = 0;    int dot = -1;    boolean negative = false;    if (num.charAt(0) == '+')      {	++start;	++point;      }    else if (num.charAt(0) == '-')      {	++start;	++point;	negative = true;      }    while (point < len)      {	char c = num.charAt (point);	if (c == '.')	  {	    if (dot >= 0)	      throw new NumberFormatException ("multiple `.'s in number");	    dot = point;	  }	else if (c == 'e' || c == 'E')	  break;	else if (Character.digit (c, 10) < 0)	  throw new NumberFormatException ("unrecognized character: " + c);	++point;      }    String val;    if (dot >= 0)      {	val = num.substring (start, dot) + num.substring (dot + 1, point);	scale = point - 1 - dot;      }    else      {	val = num.substring (start, point);	scale = 0;      }    if (val.length () == 0)      throw new NumberFormatException ("no digits seen");    if (negative)      val = "-" + val;    intVal = new BigInteger (val);    // Now parse exponent.    if (point < len)      {        point++;        if (num.charAt(point) == '+')          point++;        if (point >= len )          throw new NumberFormatException ("no exponent following e or E");	        try 	  {	    int exp = Integer.parseInt (num.substring (point));	    exp -= scale;	    if (signum () == 0)	      scale = 0;	    else if (exp > 0)	      {		intVal = intVal.multiply (BigInteger.valueOf (10).pow (exp));		scale = 0;	      }	    else	      scale = - exp;	  }        catch (NumberFormatException ex) 	  {	    throw new NumberFormatException ("malformed exponent");	  }      }  }