Validate/Convert a number using the current Locale()Tag(s): Internationalization String/Number


Depending on the International setting, numbers with comma as decimal separator may be permitted. The NumberFormat class can handle this based on the current Locale().
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;

public class NumberUtils {

  private NumberUtils() {}

  public static double getDoubleValue(String value) throws ParseException {
    // use the default locale
    return NumberUtils.getDoubleValue(Locale.getDefault(), value);
  }

  public static double getDoubleValue(Locale loc, String value)
    throws ParseException {
    // use the default locale
    return NumberFormat.getInstance(loc).parse(value).doubleValue();
  }

  public static String convertStringAsStringNumberUnLocalized(String value)
    throws ParseException {
    // use the default locale
    return convertStringAsStringNumberUnLocalized(Locale.getDefault(), value);
  }

  public static String convertStringAsStringNumberUnLocalized
    (Locale loc, String value) throws ParseException {
    double d = NumberUtils.getDoubleValue(loc, value);
    return NumberFormat.getInstance(new Locale("us")).format(d);
  }


  public static void main(String[] args) throws Exception{
    System.out.println(Locale.getDefault());
    System.out.println(NumberUtils.getDoubleValue("42,24"));
    System.out.println(NumberUtils.getDoubleValue("42.24"));
    System.out.println(NumberUtils.convertStringAsStringNumberUnLocalized
           (new Locale("fr"), "42,24"));
    /*
     * output
     * fr_CA
     * 42.24
     * 42.0
     * 42.24
     */
  }
}

blog comments powered by Disqus