我在我的应用程序中使用BigDecimal作为我的数字,例如,使用JPA。我对“精确度”和“规模”这两个术语进行了一些研究,但我不明白它们究竟是什么。
有人能解释一下BigDecimal值的'precision'和'scale'的含义吗?
@Column(precision = 11, scale = 2)
谢谢!
答案 0 :(得分:68)
BigDecimal
由两个值定义:任意精度整数和32位整数 scale 。 BigDecimal
的值定义为。
<强>精密:强>
precision是未缩放值中的位数。 例如,对于数字123.45,返回的精度为5。
因此, precision 表示任意精度整数的长度。以下是具有相同比例但精度不同的数字的几个示例:
在数字等于零(即0.000)的特殊情况下,精度始终为1.
<强>规模:强>
如果为零或正,则scale是小数点右边的位数。如果是负数,则将数字的未缩放值乘以10来表示比例的否定。例如,比例为-3表示未缩放的值乘以1000。
这意味着'BigDecimal'的整数值乘以。
以下是具有不同比例的相同精度的几个示例:
BigDecimal.toString:
toString
的{{1}}方法根据比例和BigDecimal
的行为有所不同。 (感谢@RudyVelthuis指出这一点。)
precision
,整数就会按原样打印出来。 scale == 0
,则始终使用E-Notation(例如,5级-1产生&#34; 5E + 1&#34;)scale < 0
和scale >= 0
产生一个简单的十进制数(例如10000000 scale 1产生&#34; 1000000.0&#34;)precision - scale -1 >= -6
等于小于-6。 更多示例:
答案 1 :(得分:39)
精确度:有效位总数
比例:小数点右边的位数
有关详细信息,请参阅BigDecimal
课程文档。
答案 2 :(得分:4)
答案 3 :(得分:1)
从您的示例注释中,小数点后面的最大数字是2,之前是9(总共11):
123456789,01
答案 4 :(得分:0)
在BigDecimal内包装一个getDouble,将刻度设置为BigDecimal级别
#Calculate the correlation coefficients
corr = dfno.corr(method ='pearson')
#plot it in the next line
corr.round(2).style.background_gradient(cmap='coolwarm')