2013-03-28 2 views
2

콩의 BigInteger 속성을 검증 할 수있는 웹 응용 프로그램에 사용자 정의 유효성 검사기를 구현하고 있습니다. 이 속성은 Number(8, 0) 유형의 Oracle 테이블에 매핑됩니다.Java에서 BigInteger의 정밀도를 얻는 방법

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 그 값의 정밀도를 반환하는 정확한 방법을 제공합니까?

+0

것은 당신이 규모로 착각 @a_horse_with_no_name을. –

답변

6

BigInteger에는 정밀도 개념이 Integer에 적합하지 않기 때문에 정밀도 방법이 없습니다. BigInteger은 부동 소수점 숫자의 정확한 십진수 표현을 나타내므로 관련 정밀도가있는 BigDecimal과는 달리 임의의 크기의 정수를 나타냅니다.

4

당신은 문자열로 변환하고 문자의 수를 셀 수 :

... 
BigInteger bi = new BigInteger("12345678"); 
Integer numberOfDigits = bi.abs().toString().length(); 
boolean isValid=numberOfDigits>=minNumberOfDigits && numberOfDigits<=maxNumberOfDigits; 
+0

기호'+'또는'-'는 무시해도 좋습니다. – Tiny

+0

나는 나의 대답을 편집했다. 숫자의 절대 값을 얻으려면'bi.abs()'를 사용하십시오. – Eich

+0

BigDecimal을 사용하는 OP의 방법보다 좋습니까? 이 방법은 2 진수 -> 10 진수 변환을 수행 할 필요가 없으므로 더 빠를 수 있습니다. – mwfearnley

관련 문제