6

我想使用 SuperCSV CellProcessor 解析带逗号作为小数分隔符(','而不是'。')的双精度数

我想将第一个元素 (0,35) 解析为 Double

0,35;40000,45 

我试过这样的东西:

   /** FRENCH_SYMBOLS */
private static final DecimalFormatSymbols FRENCH_SYMBOLS = new DecimalFormatSymbols(Locale.FRANCE);
  DecimalFormat   df =   new DecimalFormat();
  df.setDecimalFormatSymbols(FRENCH_SYMBOLS);
 final CellProcessor[] processors = new CellProcessor[] {
                new NotNull(new ParseDouble(new FmtNumber(df))),
                new NotNull(new ParseBigDecimal(FRENCH_SYMBOLS)) };

ParseBigDecimal 工作得很好,但 parseDouble 似乎不起作用,它给了我一个例外: org.supercsv.exception.SuperCsvCellProcessorException: '0,35' could not be parsed as a Double

4

1 回答 1

9

你完全正确 -ParseDouble不支持法式小数分隔符(逗号),但支持ParseBigDecimal。如果您认为这是一个有用的功能,为什么不提交功能请求

最简单的解决方法是在将逗号转换为句号之前简单地链接一个StrReplace 。ParseDouble

new StrReplace(",", ".", new ParseDouble())

或者,您可以编写一个自定义单元处理器,它可以:

  • 解析一个 Double(带有可配置的小数分隔符)

  • 将 BigDecimal 转换为 Double (调用doubleValue()) - 然后可以将其链接在您的new ParseBigDecimal(FRENCH_SYMBOLS)

哦,将来您可能想提到您的文件是用分号分隔的,并且您已经设置了 Super CSV CsvPreference.EXCEL_NORTH_EUROPE_PREFERENCE:)

于 2013-01-10T23:01:40.097 回答