15

大きな小数の精度とスケールを検証しようとしています。

大きな小数が10の精度または2のスケールを超えないことを検証しようとしています。値がdbの長さの制約に違反しないように、maxlengthを実行しようとしましたが、それも機能しませんでした。誰かがこの問題を解決する方向に私を親切に教えてもらえますか?

4

1 に答える 1

29

このBigDecimalクラスには、これに役立つ可能性のある3つのメソッドがあります。

  • precision()、スケーリングされていない値の桁数を返します(たとえば、数値123.45の場合、返される精度は5です)
  • scale()、正の場合は小数点記号の後の桁数を返します(scale()負の場合もあります。この場合、数値のスケーリングされていない値に、スケールの負の累乗の10を掛けます。たとえば、-3のスケールスケーリングされていない値に1000を掛けることを意味します)、
  • stripTrailingZeros()BigDecimal、これは、表現からすべての後続ゼロが削除されたaを返します。

たとえば、特定のBigDecimalbの精度とスケールを計算するには、次のように記述します。

BigDecimal noZero = b.stripTrailingZeros();
int scale = noZero.scale();
int precision = noZero.precision();    
if (scale < 0) { // Adjust for negative scale
    precision -= scale;
    scale = 0;        
}
于 2012-06-05T15:03:58.047 に答える