Search code examples
javabigdecimalsupercsv

Super CSV and Grouping Separators


We are trying to read a file that contains numbers in the following format: 123.456,78 (according to Wikipedia this is usual for some countries - e.g. Germany).

Super CSV is configured to parse the column as BigDecimal: new ParseBigDecimal(new DecimalFormatSymbols(GERMANY)).

That works well for numbers below 1k, but the grouping separator is not handled properly: '1.999,00' could not be parsed as a BigDecimal.

I've seen that it is possible to write a custom cell processor, but perhaps someone knows if there is an easier way or if this is a known bug in Super CSV.

UPDATE:

Super CSV has integrated that feature and released it with version 2.2.0. It will work for all grouping separators that are supplied via the DecimalFormatSymbols parameter.


Solution

  • ParseBigDecimal (prior to 2.2.0) only uses the decimal separator from the supplied DecimalFormatSymbols (not the grouping separator). It's not a bug, just a limitation of the current implementation.

    You can chain a StrReplace before the ParseBigDecimal (i.e. replace "." with "") and that should fix your problem (quickly).

    I think that ParseBigDecimal should actually do this for you. UPDATE: And so does it since version 2.2.0.

    Like you said, you can always write your own cell processor too :)