Java中检查BigDecimal小单位的最佳方法
我有一个金额的小单位设置,即:0.01 这意味着金额最多允许有2位小数 对于这些示例,Java中最好、最简单的验证检查是什么: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 } 这个答案的最大部分来自 因
- 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;
}