2

我正在我的 Web 应用程序中实现一个自定义验证器,它可以验证BigIntegerbean 的属性。此属性映射到一种Number(8, 0)类型的 Oracle 表。

就像BigDecimal,我没有看到BigInteger可以返回给定数字精度的方法。

基本上,我首先将一个BigInteger值转换BigDecimal为获得它的精度,如下所示(这只是为了演示)。

int minPrecision=1;
int maxPrecision=8;

BigInteger bigInteger=new BigInteger("12345");
BigDecimal bigDecimal=new BigDecimal(bigInteger, 0);

int precision=bigDecimal.precision();
boolean isValid=precision>=minPrecision && precision<=maxPrecision;

System.out.println(isValid+" : "+precision);

是否BigInteger提供了一种精确的方法来返回其值的精度?

4

2 回答 2

6

a 上没有精度方法,BigInteger因为精度的概念对整数没有意义。BigInteger表示任意大小的整数,而不是BigDecimal表示浮点数的精确十进制表示,因此具有相关的精度。

于 2013-03-28T08:54:53.873 回答
4

您可以将其转换为字符串并计算字符数:

...
BigInteger bi = new BigInteger("12345678");
Integer numberOfDigits = bi.abs().toString().length();
boolean isValid=numberOfDigits>=minNumberOfDigits && numberOfDigits<=maxNumberOfDigits;
于 2013-03-28T08:56:59.640 回答