2013-08-26 4 views
0

가능하다 "텍스트"예를 들어 값longBitsToDouble, 반올림하지 않고, 그것이 내가이 코드 조각이

public static String binStringToRealString(String text, int precision) { 
    String result = ""; 
    long longBits; 
    Double doubleValue; 

    text = "0011111111110001100110011001100110011001100110011001100110011010"; 

    longBits = Long.parseLong(text, 2); 
    Log.d(TAG, "longBits = " + longBits); 
    // longBits = 4607632778762754458 

    doubleValue = Double.longBitsToDouble(longBits); 
    Log.d(TAG, "doubleValue = " + doubleValue); 
    // doubleValue = 1.1 

    result = doubleValue.toString(); 
    Log.d(TAG, "result = " + result); 

    return result; 
} 

에 강제는 어떻게 든있는 doubleValue를 반올림하지받을 수 있습니까?

실제 값은 내가 라운딩을 중지하려면 어떻게해야합니까이 변환기 http://www.binaryconvert.com/result_double.html?hexadecimal=3FF199999999999A

처럼 1.10000000000000008881784197001

입니까?

답변

1

double에는 해당 정밀도가 표시되지 않습니다. 대신 BigDecimal과 같은 것을 사용해야합니다. 단순히 (new BigDecimal(doubleValue)).toString()을 입력하여 result을 채우면됩니다. 그러나 String 표현은 이며 게시 한 정확한 값보다 22 자릿수입니다.

편집 : BigDecimal 생성자에 대해 서로 다른 MathContext 종류의 장난 사실 난 당신이 (정확히 많은 자리 즉 값)에 게시 된 정확한 값을 얻을 수 없다 그래서 나는 그 값이 계산 된 방법 확실입니다.

Your exact value  -> 1.10000000000000008881784197001 
MathContext.DECIMAL64 -> 1.100000000000000 
MathContext.DECIMAL128 -> 1.100000000000000088817841970012523 
MathContext.UNLIMITED -> 1.100000000000000088817841970012523233890533447265625 
+0

결과가 웹 사이트보다 나을 것이라고 생각합니다. 감사! – Milan

관련 문제