大きな小数の精度とスケールを検証しようとしています。
大きな小数が10の精度または2のスケールを超えないことを検証しようとしています。値がdbの長さの制約に違反しないように、maxlengthを実行しようとしましたが、それも機能しませんでした。誰かがこの問題を解決する方向に私を親切に教えてもらえますか?
BigDecimal
クラスには、これに関係する可能性のある3つのメソッドがあります。
precision()
、スケーリングされていない値の桁数を返します(たとえば、数値123.45の場合、返される精度は5です)scale()
は、正の場合に小数点以下の桁数を返します(scale()
は負の場合があります。この場合、数値のスケーリングされていない値に10の累乗が掛けられます。スケールの否定。たとえば、スケール-3は、スケールされていない値に1000を掛けることを意味します)、stripTrailingZeros()
。これは、表現からすべての後続ゼロが削除されたBigDecimal
を返します。たとえば、特定のBigDecimal
bの精度とスケールを計算するには、次のように記述します。
BigDecimal noZero = b.stripTrailingZeros();
int scale = noZero.scale();
int precision = noZero.precision();
if (scale < 0) { // Adjust for negative scale
precision -= scale;
scale = 0;
}