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)