指数表示法的 BigDecimal(java) 中的缩放问题

Scaling issue in BigDecimal(java) for exponential notation

在我们的应用程序中,我们需要检查给定的数字是否在范围内 为此,我们使用以下代码 -

 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 用法有什么问题。

如果您检查以下内容:

bigDecimal.toPlainString() // This will show 0.00000090 -> scale of 8, appends trailing 0

由于额外的尾随零,以下条件的计算结果为假。

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;
}