minchau     2004/07/22 15:47:25

  Modified:    java/src/org/apache/xpath/objects XString.java
  Log:
  Submitted by: Yash Talwar
  Reviewed by:  Brian Minchau
  Fix for bugzilla 29655
  
  Revision  Changes    Path
  1.15      +23 -89    xml-xalan/java/src/org/apache/xpath/objects/XString.java
  
  Index: XString.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/objects/XString.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- XString.java      17 Feb 2004 04:34:38 -0000      1.14
  +++ XString.java      22 Jul 2004 22:47:25 -0000      1.15
  @@ -110,96 +110,30 @@
      */
     public double toDouble()
     {
  -    int end = length();
  -    
  -    if(0 == end)
  -      return Double.NaN;
  -
  -    double result = 0.0;
  -    int start = 0;
  -    int punctPos = end-1;
  -
  -    // Scan to first whitespace character.
  -    for (int i = start; i < end; i++)
  -    {
  -      char c = charAt(i);
  -
  -      if (!XMLCharacterRecognizer.isWhiteSpace(c))
  -      {
  -        break;
  -      }
  -      else
  -        start++;
  -    }
  -
  -    double sign = 1.0;
  -
  -    if (start < end && charAt(start) == '-')
  -    {
  -      sign = -1.0;
  -
  -      start++;
  -    }
  -
  -    int digitsFound = 0;
  -
  -    for (int i = start; i < end; i++)  // parse the string from left to 
right converting the integer part
  -    {
  -      char c = charAt(i);
  -
  -      if (c != '.')
  -      {
  -        if (XMLCharacterRecognizer.isWhiteSpace(c))
  -          break;
  -        else if (Character.isDigit(c))
  -        {
  -          result = result * 10.0 + (c - 0x30);
  -
  -          digitsFound++;
  +    /* XMLCharacterRecognizer.isWhiteSpace(char c) methods treats the 
following 
  +     * characters as white space characters.
  +     * ht - horizontal tab, nl - newline , cr - carriage return and sp - 
space
  +     * trim() methods by default also takes care of these white space 
characters
  +     * So trim() method is used to remove leading and trailing white spaces.
  +     */
  +     XMLString s = trim();
  +     double result = Double.NaN;
  +     for (int i = 0; i < s.length(); i++)
  +     {
  +             char c = s.charAt(i);
  +             if (c != '-' & c != '.' & ( c < 0X30 | c > 0x39)) {
  +            // The character is not a '-' or a '.' or a digit
  +            // then return NaN because something is wrong.
  +                     return result;
           }
  -        else
  -        {
  -          return Double.NaN;
  -        }
  -      }
  -      else
  -      {
  -        punctPos = i;
  -
  -        break;
  -      }
  -    }
  -
  -    if (charAt(punctPos) == '.')  // parse the string from the end to the 
'.' converting the fractional part
  -    {
  -      double fractPart = 0.0;
  -
  -      for (int i = end - 1; i > punctPos; i--)
  -      {
  -        char c = charAt(i);
  -
  -        if (XMLCharacterRecognizer.isWhiteSpace(c))
  -          break;
  -        else if (Character.isDigit(c))
  -        {
  -          fractPart = fractPart / 10.0 + (c - 0x30);
  -
  -          digitsFound++;
  -        }
  -        else
  -        {
  -          return Double.NaN;
  -        }
  -      }
  -
  -      result += fractPart / 10.0;
  -    }
  -
  -    if (0 == digitsFound)
  -      return Double.NaN;
  +     }
  +     try
  +     {
  +             result = Double.parseDouble(s.toString());
  +     } catch (NumberFormatException e){}
   
  -    return result * sign;
  -  }
  +     return result;
  +}
   
     /**
      * Cast result object to a boolean.
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to