Jochen Kemnade created GROOVY-7669:
--------------------------------------

             Summary: Add a method to parse a locale-specific string into a 
number
                 Key: GROOVY-7669
                 URL: https://issues.apache.org/jira/browse/GROOVY-7669
             Project: Groovy
          Issue Type: Improvement
    Affects Versions: 2.4.5
            Reporter: Jochen Kemnade


Proposed implementation from my custom category:
{code}
public static BigDecimal toBigDecimal(final CharSequence self, final Locale 
locale) {
    String s = self.toString().trim();
    DecimalFormat numberFormat = (DecimalFormat) 
NumberFormat.getInstance(locale);
    char groupingSeparator = 
numberFormat.getDecimalFormatSymbols().getGroupingSeparator();
    char decimalSeparator = 
numberFormat.getDecimalFormatSymbols().getDecimalSeparator();
    StringBuilder sb = new StringBuilder(s);
    for (int i = sb.length() - 1; i >= 0; i--) {
      char c = sb.charAt(i);
      if (c == groupingSeparator) {
        sb.replace(i, i + 1, "");
      } else if (c == decimalSeparator) {
        sb.replace(i, i + 1, ".");
      }
    }
    s = new String(sb);

    return new BigDecimal(s);
  }
{code}
tests:
{code}
  def "Parse numbers in different Locales"(){
    expect:
    toBigDecimal("123", Locale.US).toPlainString() == "123"
    toBigDecimal("123.45", Locale.US).toPlainString() == "123.45"
    toBigDecimal("1,123.45", Locale.US).toPlainString() == "1123.45"
    toBigDecimal("1,123", Locale.GERMANY).toPlainString() == "1.123"
    toBigDecimal("1.123,45", Locale.GERMANY).toPlainString() == "1123.45"
  }
{code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to