我正在尝试使用NumberFormat.getCurrencyInstance()将我的货币字符串解析为bigdecimal;
The following scenario
$1,000.01 Pass
1000.01 Pass
1,000.01 Fail -> This needs to be parsed to 1000.01 in order to pass.
abc Fail -> correct behavior.
我的方法
public BigDecimal parseClient(Field field, String clientValue, String message) throws ValidationException {
if (clientValue == null) {
return null;
}
NumberFormat nf = NumberFormat.getCurrencyInstance();
try {
return new BigDecimal(nf.parse(clientValue).toString());
} catch (ParseException ex) {
throw new ValidationException(message);
}
}
有人知道一个很好的解决方案可以让它正常工作吗?
答案 0 :(得分:1)
这是相当野蛮的力量,但为什么不检查字符串开头是否存在货币字符,如果不存在,请在前面添加?
if ( !clientValue.startsWith( "$" ) )
{
clientValue = "$" + clientValue;
}
如果不需要蛮力方法,下一种方法是记录客户端可以进入方法的每种格式。然后,创建处理这些传入输入格式所需的尽可能多的DecimcalFormat实例 - 并允许对它们进行解析。
另一种方法是将传入的clientValue标准化为单一格式。这可以通过字符串操作和正则表达式来完成。但是,您仍然需要知道传入的客户端值可以进入方法的所有不同方式的问题。所以要求在这里非常重要。
答案 1 :(得分:1)
请尝试使用此构造函数:
public static NumberFormat getCurrencyInstance(Locale inLocale)