비교 조금 까다 가져옵니다. 이러한 클래스는 무제한 크기의 정수 값을 포함 할 수 있습니다 (컴퓨터의 메모리로 제한됨).
따라서 BigDecimal 또는 BigInteger가 값을 자르므로 잘못된 값을 구할 수 있습니다.
가장 안전한 방법은 Number를 String으로 변환 한 다음이 String을 BigDecimal 클래스에 제공하여 구문 분석하는 것입니다.
예 :
Number n = ...;
int i = ...;
BigDecimal m = new BigDecimal(n.toString());
BigDecimal j = new BigDecimal(i);
boolean result = j.compareTo(m) < 0;
// equivalent to i < n
당신은 당신이 BigInteger를 또는 값이 이중의 최대 양 또는 최대 음의 값을 초과하는 다음의 정보는 다음의 제품에 숫자를 얻기 위해 Number.doubleValue을 사용하는 것이 안전합니다 BigDecimal의 인스턴스를 얻을하지 않습니다 확신 경우 비교하다.
BigDecimals를 비교할 필요가있을 수있는 추가 문제가 있습니다. 이는 BigDecimal이 기본 10에서 값을 나타내는 반면 다른 Number 하위 클래스는 기본 2를 사용하기 때문입니다.
이와 같이, new BigDecimal("0.1")
은 0.1d
또는 0.1f
과 동일하지 않습니다. 이것은 float와 double이 많은 기본 10 분수를 정확하게 표현할 수 없기 때문입니다 (BigDecimal은 가능). 따라서 BigDecimal에서 double 값을 얻으면 결국 실수로 비교할 수 있습니다. 그러나 당신이 직면 할 필요가없는 문제에서 이것을 ints와 비교하고 있기 때문에.
전달 된 숫자는 항상 정수가 될 것입니까? 이 예제에는 캐스트 예외가있을 수 있습니다. – StKiller
나는 그것이 가능하기 때문에 BigInteger에 대해 묻는 것이다. – kostja
이것 좀 봐 : http://stackoverflow.com/questions/480632/why-doesnt-java-lang-number-implement-comparable – CKuck