3

我正在尝试使用 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);
        }
    }

有人知道一个很好的解决方案来让它正常工作吗?

4

2 回答 2

1

这是相当蛮力的,但为什么不检查字符串开头是否存在货币字符,如果不存在,则在前面添加它?

if ( !clientValue.startsWith( "$" ) )
{
   clientValue = "$" + clientValue;
}

如果不需要蛮力方法,则下一个方法是记录客户端可以进入该方法的每种格式。然后,创建处理这些传入输入格式所需的尽可能多的 DecimcalFormat 实例,并允许对它们进行解析。

另一种方法是将传入的 clientValue 标准化为单一格式。这可以通过字符串操作和正则表达式来完成。但是,您仍然需要了解传入的 clientvalue 可以进入方法的所有不同方式。所以需求在这里非常重要。

于 2013-02-13T16:31:33.183 回答
1

尝试使用此构造函数:

public static NumberFormat getCurrencyInstance(Locale inLocale)
于 2013-02-13T16:39:27.030 回答