2016-02-16 40 views
26

私のアプリケーションでは、JPAなどで私の数値にBigDecimalを使用しています。私は「精度」と「スケール」という用語について少し調べましたが、正確には何か分かりません。BigDecimal、精度と位取り

誰も私にBigDecimal値の '精度'と 'スケール'の意味を説明できますか?

@Column(precision = 11, scale = 2) 

ありがとう! Javadocを引用

+0

質問は 'java.math.BigDecimal'とに絶対に何も持っていません。 '@ javax.persistence.Column'はJava SEの一部ではありません。 JPAの主題です。 – Tiny

+1

精度とスケールは、多くの場合、彼はJPAと、たとえば、計算に使用するものであるのjava.math.BigDecimal、ために使用される用語です。 ISTM彼または彼女はBigDecimalの文脈で彼らが何を意味するかを知りたい。実際 –

答えて

39

BigDecimalは、二つの値によって定義される任意の精度の整数、32ビット整数スケールBigDecimalの値はunscaledValue*10^{-scale}と定義されています。

精度:

precisionはスケーリングされていない値の桁数です。 は、例えば、数123.45のために、返される精度は5

だから、精度は、任意精度の整数の長さを示しています。ここで、同じスケールを持つ数値のいくつかの例が、異なる精度である:

  • 100000分の12345 = 0.12345 //スケール= 5、精度= 5
  • 100000分の12340 = 0.1234 //スケール= 5、数がゼロに等しいことが特殊な場合(すなわち、0.000)IN = 1

精度= 4

  • 100000分の1 = 0.00001 //スケール= 5、精度、精度は常に1です。

    スケール:

    ゼロまたは正の場合、scaleは、小数点以下の桁数です。負の場合、数値の非スケーリングされた値は、スケールの否定の累乗に10を掛けられます。例えば、-3のスケールはスケーリングされていない値は、これは「のBigDecimal」の整数値を10^{-scale}乗算されることを意味1000

    乗算されることを意味します。ここ

    は同じ精度のいくつかの例は、異なるスケールである:スケール4 = 1.2345

    • スケールと12345 5 = 0.12345
    • 12345 ...
    • 12345スケール0と= 12345
    • スケール-1の123450

    BigDecimal.toString:BigDecimalため

    toString方法が異なっ規模とprecisionに基づいて動作します。そのまま(これを指摘するため@RudyVelthuisに感謝。)

    • scale == 0場合、整数は単に、プリントアウトされます。
    • scale < 0場合、E-表記が常に使用される普通進数が生成さscale >= 0precision - scale -1 >= -6場合
    • (例えば5スケール-1 "5E + 1" を生成)(例えば、スケール1は "1000000.0" を生成10000000)
    • そうでない場合は、E-の表記が使用され、例えばprecision - scale -1unscaledValue*10^{-scale} -6未満で等しいので、10スケール8は、 "1.0E-7" を生成します。

    詳細例:

    • 100分の19 = 0.19 //整数= 19、スケール= 2、精度= 2
    • 1/1000 = 0.0001 //整数= 1、スケール= 4、精度= 1つの
  • +2

    、 '[12345は、-1]'良くToString'はあまりにも、返されるもの 'おそらく' 1.2345E + 5'、で表されます。そうでなければ、非常に良い説明。 –

    +1

    例についての素晴らしい説明! toStringメソッドは、ヘック、私は 'ToString'を書い参照E +表記 – jpadilladev

    +0

    @RudyVelthuisのおかげで、私が説明するセクションを追加しました。それはJavaではなく、Delphiの話です。 ;-) –

    3

    精度は、スケーリングされていない値の桁数です。

    は、ゼロまたは正の場合、スケールは小数点以下の桁数です。負の場合、数値の非スケーリングされた値は、スケールの否定の累乗に10を掛けられます。例えば、-3のスケールはスケーリングされていない値が乗算される手段1000

    14

    精度:有効数字

    総数

    スケール:小数点以下の桁数

    Source

    0

    あなたの例注釈最大桁から(完全11)の前に小数点以下2及び9: 123456789,01