I'm using BigDecimal for my numbers in my application, for example, with JPA. I did a bit of researching about the terms 'precision' and 'scale' but I don't understand what are they exactly.
Can anyone explain me the meaning of 'precision' and 'scale' for a BigDecimal value?
@Column(precision = 11, scale = 2)
Thanks!
A
BigDecimal
is defined by two values: an arbitrary precision integer and a 32-bit integer scale. The value of theBigDecimal
is defined to be .Precision:
So, precision indicates the length of the arbitrary precision integer. Here are a few examples of numbers with the same scale, but different precision:
In the special case that the number is equal to zero (i.e. 0.000), the precision is always 1.
Scale:
This means that the integer value of the ‘BigDecimal’ is multiplied by .
Here are a few examples of the same precision, with different scales:
BigDecimal.toString:
The
toString
method for aBigDecimal
behaves differently based on the scale andprecision
. (Thanks to @RudyVelthuis for pointing this out.)scale == 0
, the integer is just printed out, as-is.scale < 0
, E-Notation is always used (e.g. 5 scale -1 produces "5E+1")scale >= 0
andprecision - scale -1 >= -6
a plain decimal number is produced (e.g. 10000000 scale 1 produces "1000000.0")precision - scale -1
equals is less than -6.More examples:
Precision: Total number of significant digits
Scale: Number of digits to the right of the decimal point
See
BigDecimal
class documentation for details.From your example annotation the maximum digits is 2 after the decimal point and 9 before (totally 11):
123456789,01
Quoting Javadoc:
and