我正在尝试验证大小数的精度和比例。
我希望验证一个大小数不超过10的精度或2的标度。我尝试做一个maxlength所以这个值不会违反我的db长度限制,但是无法得到工作要么。有人可以指点我解决这个问题的方向吗?
答案 0 :(得分:24)
BigDecimal
类有三种方法可能对此感兴趣:
precision()
,返回未缩放值的位数(例如,对于数字123.45,返回的精度为5)scale()
,当正数(scale()
可以为负数时,返回小数点分隔符后面的位数,在这种情况下,数字的未缩放值乘以10乘以否定比例。例如,比例为-3表示未缩放的值乘以1000),stripTrailingZeros()
,返回BigDecimal
,并从表示中删除所有尾随零。例如,要计算给定BigDecimal
b的精度和比例,我们可以这样写:
BigDecimal noZero = b.stripTrailingZeros();
int scale = noZero.scale();
int precision = noZero.precision();
if (scale < 0) { // Adjust for negative scale
precision -= scale;
scale = 0;
}