如何定义分组分隔符以解析Camel Bindy中的BigDecimal数字?

时间:2014-08-19 10:24:54

标签: java csv apache-camel bigdecimal bindy

我有一个CSV文件,其中包含以下格式的数字:1,234.56,其中,是分组分隔符,.是小数点分隔符。我想使用Camel Bindy将该数字解析为BigDecimal。这是此数字的模型类的一部分:

@DataField(pos = 6, required = true, precision = 2, pattern = "#,###.##")
public BigDecimal value;

现在的问题是,即使已经应用了正确的模式,这也会导致java.lang.NumberFormatException。如果我从注释和分组分隔符中删除数据文件中的数字,那么一切正常。或者,如果我使用Double类型而不是BigDecimal

Camel Bindy Documentation提到可以设置BigDecimal的分组分隔符,但该信息下面的表示该模式仅支持Decimal而不是BigDecimal类型。

使用的FormatFactory类的源代码也显示该模式不会用于BigDecimal类型。

所以我的问题是:如何为BigDecimal类型设置和使用分组分隔符,就像上面提到的文档一样?或者这是否目前不受支持,我必须使用Double代替?

P.S:区域设置当前设置为en_US

2 个答案:

答案 0 :(得分:4)

Camel bindy模型的@DataField提出参数精度,如模式,但不是分组分隔符,以将数据解析为BigDecimal

实施例

@DataField(pos = 2, precision = 2, pattern = "00.00")
private BigDecimal bigDecimal;

这种模式对你来说还不够吗?

答案 1 :(得分:0)

This feature has been added to Camel Bindy,可以与以下注释类型一起使用:

@DataField(pos = x, precision = 2, pattern = "#,###.##")
private BigDecimal number;

或:

@DataField(pos = x, precision = 2, pattern = "#,###.##", groupingSeparator = ",", decimalSeparator = ".")
private BigDecimal number;

第一个版本使用当前设置的Locale值。如果未设置,则可以使用第二个版本指定自己的分组和小数分隔符。

这两个版本都可以解析这些数字:

  

1,000.00
  -100
  123,456,789.00
  0.00

我想包含此功能的第一个版本将是版本2.14.0