Java中检查BigDecimal小单位的最佳方法

Java中检查BigDecimal小单位的最佳方法,java,validation,decimal,bigdecimal,Java,Validation,Decimal,Bigdecimal,我有一个金额的小单位设置,即:0.01 这意味着金额最多允许有2位小数 对于这些示例,Java中最好、最简单的验证检查是什么: 5-->有效 5.0-->有效 5.00-->有效 5.000-->有效 5.1-->有效 5.11-->有效 5.111-->无效 5.110-->有效 代码应该类似于: public void isValid(BigDecimal amountToCheck, BigDecimal minorUnit) { //TODO } 这个答案的最大部分来自 因

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

这意味着金额最多允许有2位小数

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

  • 5-->有效
  • 5.0-->有效
  • 5.00-->有效
  • 5.000-->有效
  • 5.1-->有效
  • 5.11-->有效
  • 5.111-->无效
  • 5.110-->有效
代码应该类似于:

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

这个答案的最大部分来自

因此,基本上有一种方法给出小数位数(不包括尾随的
0
decimals):

int getNumberOfDecimalPlaces(BigDecimal-BigDecimal){
String String=bigDecimal.stripTrailingZeros().toPlainString();
int index=string.indexOf(“.”);
返回索引<0?0:string.length()-index-1;
}
然后,您可以根据自己的需要将其命名为:

public boolean isValid(BigDecimal amountToCheck, BigDecimal minorUnit) {

    return getNumberOfDecimalPlaces(amountToCheck) <= getNumberOfDecimalPlaces(minorUnit);
}
public boolean有效(BigDecimal amountToCheck,BigDecimal minorUnit){

返回getNumberOfDecimalPlaces(amountToCheck)为什么要使用
BigDecimal minorUnit
0.01
的值会改变吗?如果是,为什么要使用BigDecimal而不是简单的
int
来指定小数位数?这些都是很好的问题,但问题是在这里它们是如何实现的,我在这里使用小单位,所以我需要找到一个解决方案通过这种方式。而不是低效地转换到
字符串和搜索,只需
.stripTrailingZeros().scale()
public boolean isValid(BigDecimal amountToCheck, BigDecimal minorUnit) {

    return getNumberOfDecimalPlaces(amountToCheck) <= getNumberOfDecimalPlaces(minorUnit);
}
public boolean isValid(BigDecimal amountToCheck, int maxDecimals ) {

    return getNumberOfDecimalPlaces(amountToCheck) <= maxDecimals;
}