在 Java 中检查 BigDecimal 次要单位的最佳方法
Best way to check minor unit of BigDecimal in Java
我有一个金额的次要单位设置,即: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
}
此答案的大部分内容来自 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;
}
我有一个金额的次要单位设置,即: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
}
此答案的大部分内容来自 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;
}