JPAなど、アプリケーションの番号にBigDecimalを使用しています。 「精度」と「スケール」という用語について少し調査しましたが、それらが正確に何なのかわかりません。
BigDecimal値の「精度」と「スケール」の意味を誰かが説明できますか?
@Column(precision = 11, scale = 2)
ありがとう!
BigDecimal
は2つの値で定義されます:任意精度整数と32ビット整数scale。 BigDecimal
の値は、 。
精度:
精度 は、スケールなしの値の桁数です。たとえば、数値123.45の場合、返される精度は5です。
したがって、precisionは、任意精度整数の長さを示します。以下に、スケールが同じで精度が異なる数の例を示します。
数値がゼロ(0.000など)である特別な場合、精度は常に1です。
スケール:
ゼロまたは正の場合、 scale は小数点の右側の桁数です。負の場合、数値のスケールなしの値に10のスケールの否定の乗を掛けます。たとえば、スケールが-3の場合、スケールなしの値に1000が乗算されます。
これは、「BigDecimal」の整数値に乗算されることを意味します 。
以下に、スケールが異なる同じ精度の例をいくつか示します。
BigDecimal.toString:
toString
のBigDecimal
メソッドは、スケールとprecision
に基づいて異なる動作をします。 (これを指摘してくれた@RudyVelthuisに感謝します。)
scale == 0
の場合、整数はそのまま出力されます。scale < 0
の場合、E表記が常に使用されます(たとえば、5 scale -1は「5E + 1」を生成します)scale >= 0
およびprecision - scale -1 >= -6
の場合、プレーンな10進数が生成されます(たとえば、10000000スケール1は「1000000.0」を生成します)precision - scale -1
が等しいため、10スケール8は「1.0E-7」を生成します -6未満です。その他の例:
精度:有効数字の総数
スケール:小数点の右側の桁数
詳細については、 BigDecimal
クラスのドキュメントを参照してください。
引用 Javadoc :
精度は、スケールなしの値の桁数です。
そして
ゼロまたは正の場合、スケールは小数点の右側の桁数です。負の場合、数値のスケールなしの値に10のスケールの否定の累乗が乗算されます。たとえば、スケール-3は、スケールなしの値に1000を掛けることを意味します。
注釈の例では、最大桁数は小数点以下2桁、前9桁(合計11桁)です:123456789,01