我必须将我的Web应用程序与支付网关集成。我想以美元输入总金额,然后将其转换为美分,因为我的支付网关库接受的数量为Cents(bgWorker.WorkerReportsProgress = true
类型)。我发现java中的Integer
是操纵货币的最佳方式。目前我接受输入为50美元并将其转换为Big Decimal
,如下所示:
Integer
这是将美元转换为美分的正确方法,还是应该以其他方式实现?
答案 0 :(得分:9)
最简单的内容包括以下几点:
public static int usdToCents(BigDecimal usd) {
return usd.movePointRight(2).intValueExact();
}
我建议intValueExact
,因为如果信息丢失(如果您处理超过21,474,836.47美元的交易),这将引发异常。这也可用于捕获丢失的分数。
我还要考虑接受分数和分数的值是否正确。我说不,客户端代码必须提供有效的可结算金额,所以如果我需要一个自定义异常,我可以这样做:
public static int usdToCents(BigDecimal usd) {
if (usd.scale() > 2) //more than 2dp
thrown new InvalidUsdException(usd);// because was not supplied a billable USD amount
BigDecimal bigDecimalInCents = usd.movePointRight(2);
int cents = bigDecimalInCents.intValueExact();
return cents;
}
答案 1 :(得分:0)
您还应该考虑尽量减少Round-off errors
。
int amountInCent = (int)(amountInDollar*100 + 0.5);
LOGGER.debug("Amount in Cents : "+ amountInCent );
上述解决方案可能会对您有所帮助。