BigDecimal bigdecimal = BigDecimal.valueOf(int);
のような形でクラスBigDecimalの値が設定されているとします。
このとき
bigdecimal.precision()
を用いるとスケールなしの値の桁数を取得することができ、
bigdecimal.scale()
を用いると値が正または0の場合は小数点以下の桁数を取得することが出来ます。
(値が負の場合にscale()を用いると スケールなしの数値にスケールの正負を逆にした値を指数とする 10 の累乗を乗算する とのことなのですが、今回は正の数に限らせていただきます。)
上記のメソッドと正負の判定を組み合わせて桁数チェックのバリデーターを作ると以下のようになります。
if (bigdecimal.compareTo(BigDecimal.valueOf(0)) < 0) { // 値がマイナスだった場合の処理 } else if (bigdecimal.precision() - bigdecimal.scale() > 整数部の桁数上限) { // 整数部の桁数が上限を超えてる場合の処理 } else if (bigdecimal.scale() > 小数点以下の桁数の上限) { // 小数点以下の桁数が上限を超えてる場合の処理 }