在 Java 中检查 BigDecimal 次要单位的最佳方法

Best way to check minor unit of BigDecimal in Java

我有一个金额的次要单位设置,即:0.01

表示金额最多允许保留2位小数。

在 Java 中,对于这些示例,什么是最好和最简单的验证检查:

代码应该是这样的:

public void isValid(BigDecimal amountToCheck, BigDecimal minorUnit) {
    //TODO
}

此答案的大部分内容来自 Determine Number of Decimal Place using BigDecimal

所以基本上你有一种方法给你小数位数(不包括尾随 0 小数):

int getNumberOfDecimalPlaces(BigDecimal bigDecimal) {
    String string = bigDecimal.stripTrailingZeros().toPlainString();
    int index = string.indexOf(".");
    return index < 0 ? 0 : string.length() - index - 1;
}

然后你可以调用它来满足你的需要:

public boolean isValid(BigDecimal amountToCheck, BigDecimal minorUnit) {

    return getNumberOfDecimalPlaces(amountToCheck) <= getNumberOfDecimalPlaces(minorUnit);
}

或者正如@Pijotrek 的评论所建议的那样:

public boolean isValid(BigDecimal amountToCheck, int maxDecimals ) {

    return getNumberOfDecimalPlaces(amountToCheck) <= maxDecimals;
}