[prev in list] [next in list] [prev in thread] [next in thread]
List: xalan-cvs
Subject: cvs commit: xml-xalan/java/src/org/apache/xpath/objects XString.java
From: minchau () apache ! org
Date: 2004-07-22 22:47:25
Message-ID: 20040722224725.10785.qmail () minotaur ! apache ! org
[Download RAW message or body]
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: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic