我对如何MonetaryAmountFormat
使用 Moneta JSR-354 实现自定义 a 感到非常困惑。
我的意图是能够同时解析和1.23
解析。$3.45
MonetaryAmount
这是我的单元测试:
@Test
public void testString() {
Bid bid = new Bid("1.23");
assertEquals(1.23, bid.getValue(), 0.0);
System.out.println(bid);
bid = new Bid("$3.45");
assertEquals(3.45, bid.getValue(), 0.0);
System.out.println(bid);
}
这是我的课:
public final class Bid {
private static final CurrencyUnit USD = Monetary.getCurrency("USD");
private MonetaryAmount bid;
/**
* Constructor.
*
* @param bidStr the bid
*/
public Bid(String bidStr) {
MonetaryAmountFormat format = MonetaryFormats.getAmountFormat(
AmountFormatQueryBuilder.of(Locale.US)
.set("pattern", "###.##")
.build());
if (StringUtils.isNotBlank(bidStr)) {
bidStr = bidStr.trim();
bidStr = bidStr.startsWith("$") ? bidStr.substring(1) : bidStr;
try {
bid = FastMoney.parse(bidStr, format);
} catch (NumberFormatException e) {
bid = FastMoney.of(0, USD);
}
}
}
/**
* Constructor.
*
* @param bidDouble the bid
*/
public Bid(double bidDouble) {
bid = FastMoney.of(bidDouble, USD);
}
public double getValue() {
return bid.getNumber().doubleValue();
}
}
我真的很希望能够解析bidStr
有或没有$
使用 single MonetaryAmountFormat
,但是在花了很多时间试图找出如何使$
optional 之后,我放弃了。不幸的是,我什至无法弄清楚如何将其1.23
解析为美元。莫内塔投出一个NullPointerException
。我应该使用 设置货币AmountFormatQueryBuilder
吗?可以使用 设置的所有键是AmountFormatQueryBuilder
什么?我搜索了文档,但除了几个常用键(例如pattern
.