web-dev-qa-db-ja.com

BigDecimalで精度とスケーリングを検証するにはどうすればよいですか?

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

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

12
Code Junkie

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