大きな小数の精度とスケールを検証しようとしています。
大きな小数が10の精度または2のスケールを超えないことを検証しようとしています。値がdbの長さの制約に違反しないように、maxlengthを実行しようとしましたが、それも機能しませんでした。誰かがこの問題を解決する方向に私を親切に教えてもらえますか?
大きな小数の精度とスケールを検証しようとしています。
大きな小数が10の精度または2のスケールを超えないことを検証しようとしています。値がdbの長さの制約に違反しないように、maxlengthを実行しようとしましたが、それも機能しませんでした。誰かがこの問題を解決する方向に私を親切に教えてもらえますか?
このBigDecimal
クラスには、これに役立つ可能性のある3つのメソッドがあります。
precision()
、スケーリングされていない値の桁数を返します(たとえば、数値123.45の場合、返される精度は5です)scale()
、正の場合は小数点記号の後の桁数を返します(scale()
負の場合もあります。この場合、数値のスケーリングされていない値に、スケールの負の累乗の10を掛けます。たとえば、-3のスケールスケーリングされていない値に1000を掛けることを意味します)、stripTrailingZeros()
BigDecimal
、これは、表現からすべての後続ゼロが削除されたaを返します。たとえば、特定の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;
}