2014-05-20 3 views
0

나는 SAS xpt 파일을 읽고 열 값을 ByteBuffer에 저장 한 다음 getValue() 메서드를 사용하여 Double 객체를 가져 오는 응용 프로그램을 가지고 있습니다. 이제 소수점 12 자리까지 Double까지 인쇄해야합니다. 나는이 어떤에서에서 하나의 답을 찾을 수는 정수 부분에있는 3 개 자리가 있기 때문에 주어 잘하지만, 몇 가지 경우이중 숫자로 반올림하는 방법

다음
BigDecimal bd = new BigDecimal(dblColumnData.doubleValue()); 
System.out.println(String.format("%."+15+"G", bd)); 

15을 작동하고 소수점 후 12 중요한 자리가 있어야합니다.

에서 BigDecimal을 생성했기 때문에 작동하지 않는 경우입니다. Double을 인쇄하면 십진법 후 12 자리 이상이 포함되며 위의 동일한 접근 방식으로 정확하게 반올림됩니다.

따라서 나는 내 문제를 해결할 것입니다 Double에 대한 비슷한 형식의 방법을 얻을 수 있다고 생각합니다.

+0

인쇄 할 인쇄 할 다음 * 중요한 * 숫자를 실제로 의미합니까? 나는. '123456.123456'에는 유효 자릿수 12 자리가 포함되지만 소수점 여섯 자리 만 포함됩니다. 자네가 12 자리가 필요하다는 뜻인 것 같니? –

+0

@EJP는 소수 자릿수임을 확신합니다 :-) –

+0

dblColumnData에는 어떤 다른 방법이 있습니까? 그것은 당신이 올바르게 두 번 통과하지 않고 다른 방법으로 그것을 BigDecimal로 변환해야 할 가능성이 보인다. –

답변

-1

나는 이런 식으로 어떻게 든 그것을 할 것 :

static double roundTo(double d, int digit) { 
    double exp = Math.pow(10, digit); 
    d *= exp; 
    d = Math.round(d); 
    return d/exp; 
} 

다음은 쉼표 후 3 곳으로 숫자를 반올림하고

public static void main(String[] args) { 
    System.out.println(roundTo(7.34343434, 3)); 
} 

"7.343"

+0

십진법을 정확히 반올림 할 수없고 double을 갖지 않으면 BigDecimals를가집니다. – EJP

+0

@EJP 아니, 그는 두 배나 늘었습니다. 그는 BigDecimal을 솔루션의 일부로 사용하려고 시도했습니다. –

+0

이 솔루션은 정상적으로 작동합니다. 그는 서식을 수행하기 위해 BigDecimal을 사용했습니다. – Prior99

관련 문제