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