Update of /var/cvs/src/org/mmbase/datatypes
In directory james.mmbase.org:/tmp/cvs-serv7272

Modified Files:
        NumberDataType.java 
Log Message:
If a String correctly parses as a Decimal then always prefer that, since no 
information gets lost then


See also: http://cvs.mmbase.org/viewcvs/src/org/mmbase/datatypes


Index: NumberDataType.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/datatypes/NumberDataType.java,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -b -r1.35 -r1.36
--- NumberDataType.java 3 Feb 2009 10:05:42 -0000       1.35
+++ NumberDataType.java 4 Mar 2009 11:32:09 -0000       1.36
@@ -22,7 +22,7 @@
  * A DataType representing some kind of numeric value, like a floating point 
number or an integer number.
  *
  * @author Pierre van Rooden
- * @version $Id: NumberDataType.java,v 1.35 2009/02/03 10:05:42 michiel Exp $
+ * @version $Id: NumberDataType.java,v 1.36 2009/03/04 11:32:09 michiel Exp $
  * @since MMBase-1.8
  */
 abstract public class NumberDataType<E extends Number & Comparable<E>> extends 
ComparableDataType<E> {
@@ -40,12 +40,17 @@
     protected Number castString(Object preCast, Cloud cloud) throws 
CastException {
         if (preCast == null || "".equals(preCast)) return null;
         if (preCast instanceof String) {
+
+            String s = (String) preCast;
+            try {
+                return Casting.toDecimal(s);
+            } catch (NumberFormatException nfe) {
+                log.debug(nfe);
             Locale l = cloud != null ? cloud.getLocale() : Locale.getDefault();
             NumberFormat nf = NumberFormat.getNumberInstance(l);
             nf.setGroupingUsed(false); // we never want to parse e.g. "1.2" to 
"12". It simply makes
                                        // no sense, and hard to make backwards 
compatible
             ParsePosition p = new ParsePosition(0);
-            String s = (String) preCast;
             Number number =  nf.parse(s, p);
             if (log.isDebugEnabled()) {
                 log.debug("Parsed " + s + " to " + number + " (" + p + " " + 
l);
@@ -56,11 +61,12 @@
                      log.debug("Not a valid double");
                      throw new CastException("Not a number: '" + s + "'");
                  } else {
-                     log.debug("Casting to double " + s);
+                        log.debug("Casting to decimal " + s);
                      return Casting.toDecimal(s);
                  }
              }
              return Casting.toDecimal(number);
+            }
         } else if (preCast instanceof Float) {
             if (((Float) preCast).isInfinite()) {
                 return (Float) preCast;
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to