You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ad...@apache.org on 2013/10/09 23:12:46 UTC
svn commit: r1530794 -
/commons/sandbox/convert/trunk/src/main/java/org/apache/commons/convert/NumberConverters.java
Author: adrianc
Date: Wed Oct 9 21:12:46 2013
New Revision: 1530794
URL: http://svn.apache.org/r1530794
Log:
Fixed a problem with String->Number->String conversion when a format string was specified.
https://issues.apache.org/jira/browse/SANDBOX-461
Modified:
commons/sandbox/convert/trunk/src/main/java/org/apache/commons/convert/NumberConverters.java
Modified: commons/sandbox/convert/trunk/src/main/java/org/apache/commons/convert/NumberConverters.java
URL: http://svn.apache.org/viewvc/commons/sandbox/convert/trunk/src/main/java/org/apache/commons/convert/NumberConverters.java?rev=1530794&r1=1530793&r2=1530794&view=diff
==============================================================================
--- commons/sandbox/convert/trunk/src/main/java/org/apache/commons/convert/NumberConverters.java (original)
+++ commons/sandbox/convert/trunk/src/main/java/org/apache/commons/convert/NumberConverters.java Wed Oct 9 21:12:46 2013
@@ -20,6 +20,7 @@ package org.apache.commons.convert;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;
@@ -30,8 +31,7 @@ public class NumberConverters implements
protected static final Class<?>[] classArray = {BigDecimal.class, BigInteger.class, Byte.class, Double.class, Integer.class, Float.class, Long.class, Short.class};
- protected static Number fromString(String str, Locale locale) throws ConversionException {
- NumberFormat nf = NumberFormat.getNumberInstance(locale);
+ protected static Number fromString(String str, NumberFormat nf) throws ConversionException {
try {
return nf.parse(str);
} catch (ParseException e) {
@@ -62,21 +62,11 @@ public class NumberConverters implements
}
}
- public static abstract class AbstractNumberConverter<S, T> extends AbstractLocalizedConverter<S, T> {
- protected AbstractNumberConverter(Class<S> sourceClass, Class<T> targetClass) {
- super(sourceClass, targetClass);
- }
-
- public T convert(S obj, Locale locale, TimeZone timeZone, String formatString) throws ConversionException {
- return convert(obj, locale, null);
- }
- }
-
/**
* An abstract <code>Number</code> to <code>String</code> converter class
* that implements some of the <code>LocalizedConverter</code> methods.
*/
- public static abstract class AbstractNumberToStringConverter<N extends Number> extends AbstractNumberConverter<N, String> {
+ public static abstract class AbstractNumberToStringConverter<N extends Number> extends AbstractLocalizedConverter<N, String> {
public AbstractNumberToStringConverter(Class<N> sourceClass) {
super(sourceClass, String.class);
}
@@ -85,8 +75,12 @@ public class NumberConverters implements
return obj.toString();
}
- public String convert(N obj, Locale locale, TimeZone timeZone) throws ConversionException {
- return format(obj, NumberFormat.getNumberInstance(locale));
+ public String convert(N obj, Locale locale, TimeZone timeZone, String formatString) throws ConversionException {
+ if (formatString == null) {
+ return format(obj, NumberFormat.getNumberInstance(locale));
+ } else {
+ return format(obj, new DecimalFormat(formatString));
+ }
}
protected abstract String format(N obj, NumberFormat nf) throws ConversionException;
@@ -96,15 +90,19 @@ public class NumberConverters implements
* An abstract <code>String</code> to <code>Number</code> converter class
* that implements some of the <code>LocalizedConverter</code> methods.
*/
- public static abstract class AbstractStringToNumberConverter<N extends Number> extends AbstractNumberConverter<String, N> {
+ public static abstract class AbstractStringToNumberConverter<N extends Number> extends AbstractLocalizedConverter<String, N> {
public AbstractStringToNumberConverter(Class<N> targetClass) {
super(String.class, targetClass);
}
protected abstract N convert(Number number) throws ConversionException;
- public N convert(String obj, Locale locale, TimeZone timeZone) throws ConversionException {
- return convert(fromString(obj, locale));
+ public N convert(String obj, Locale locale, TimeZone timeZone, String formatString) throws ConversionException {
+ if (formatString == null) {
+ return convert(fromString(obj, NumberFormat.getNumberInstance(locale)));
+ } else {
+ return convert(fromString(obj, new DecimalFormat(formatString)));
+ }
}
}