我有一个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
。
答案 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
。