私は大きな小数の精度と位取りを検証しようとしています。BigDecimalで精度と位取りを検証するにはどうすればよいですか?
大10進が10の精度か2の尺度を超えないことを検証しようとしています。maxlengthを試してみましたが、その値はDBの長さの制約に違反しませんでしたが、取得できませんでしたそれも働いている。誰かがこの問題を解決する方向で私を親切に指摘できますか?
私は大きな小数の精度と位取りを検証しようとしています。BigDecimalで精度と位取りを検証するにはどうすればよいですか?
大10進が10の精度か2の尺度を超えないことを検証しようとしています。maxlengthを試してみましたが、その値はDBの長さの制約に違反しませんでしたが、取得できませんでしたそれも働いている。誰かがこの問題を解決する方向で私を親切に指摘できますか?
BigDecimal
クラスは、このために興味深いかもしれない三つの方法があります
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;
}
多分(ただし、オラクルベース)NUMBER(10,2)のような? –
sybaseを使用しているため、Oracleについてはあまりよく分かりません。私は、テストするためにif文を使ってjavaでフィールドバリデーターを構築しようとしています。送信される値が10,2を超えないようにしてください。 –