在我们的应用程序中,我们需要检查给定的数字是否在范围内 为此我们使用下面的代码 -
boolean isValidRangeNumber(Double no,int precision, int scale){
BigDecimal bigDecimal = new BigDecimal(no.toString());
int intPartLength = precision - scale;
int size = (bigDecimal.longValue() + "").toString().length();
if(bigDecimal.precision() <= precision && bigDecimal.scale() <= scale && size <= intPartLength)
return true;
return false;
}
但是当我们调用isValidRangeNumber(0.0000009, 10,7)
而不是失败时bigDecimal.scale()
给出8可以是最大值7,而它是有效数字。请建议,这个BigDecimal用法有什么问题。
答案 0 :(得分:1)
如果您检查以下内容:
bigDecimal.toPlainString() // This will show 0.00000090 -> scale of 8, appends trailing 0
由于额外的尾随零,以下条件的计算结果为false。
bigDecimal.scale() <= scale // 8 <= 7
您可以更改为以下内容:
boolean isValidRangeNumber(Double no, int precision, int scale) {
BigDecimal bigDecimal = new BigDecimal(no.toString()).stripTrailingZeros(); //Get rid of trailing zeros
bigDecimal.toPlainString();
int intPartLength = precision - scale;
int size = (bigDecimal.longValue() + "").toString().length();
if (bigDecimal.precision() <= precision && bigDecimal.scale() <= scale
&& size <= intPartLength)
return true;
return false;
}