我在应用程序中使用 BigDecimal 来表示数字,例如使用 JPA。我对“精度”和“规模”这两个术语做了一些研究,但我不明白它们到底是什么。
谁能解释一下 BigDecimal 值的“精度”和“小数位数”的含义?
@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 the BigDecimal
is defined to be .
精确:
The 精确是未缩放值中的位数。
例如,对于数字 123.45,返回的精度为 5。
So, 精确表示任意精度整数的长度。以下是具有相同小数位数但不同精度的数字的一些示例:
- 12345 / 100000 = 0.12345 // 小数位数 = 5,精度 = 5
- 12340 / 100000 = 0.1234 // 小数位数 = 4,精度 = 4
- 1 / 100000 = 0.00001 // 小数位数 = 5,精度 = 1
在数字等于 0(即 0.000)的特殊情况下,精度始终为 1。
Scale:
如果为零或正数,则scale是小数点右边的位数。如果为负,则该数字的未缩放值乘以 10 的缩放负次方。例如,标度为 -3 表示未标度值乘以 1000。
This means that the integer value of the ‘BigDecimal’ is multiplied by .
以下是具有不同比例的相同精度的几个示例:
- 12345,标度 5 = 0.12345
- 12345,标度 4 = 1.2345
- …
- 12345 带刻度 0 = 12345
- 12345 带刻度 -1 = 123450†
BigDecimal.toString:
The toString
的方法BigDecimal
根据规模和行为不同precision
。 (感谢@RudyVelthuis 指出了这一点。)
- If
scale == 0
,整数按原样打印出来。
- If
scale < 0
, 始终使用 E 表示法(例如 5 刻度 -1 生成“5E+1”)
- If
scale >= 0
and precision - scale -1 >= -6
生成一个普通的十进制数(例如 10000000 标度 1 生成“1000000.0”)
- Otherwise, E-notation is used, e.g. 10 scale 8 produces "1.0E-7" since
precision - scale -1
equals is less than -6.
更多示例:
- 19/100 = 0.19 // 整数=19,小数位数=2,精度=2
- 1/1000 = 0.0001 // 整数 = 1,小数位数 = 4,精度 = 1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)