2016-09-21 3 views
2

아래 코드와 관련하여 질문이 있습니다. Float.toString() 메서드를 사용하면 숫자가 반올림됩니다. 왜 이렇게합니까? 그 뒤에 어떤 특정한 논리가 있습니까?Float.toString()이 숫자 값을 변경하는 이유는 무엇입니까?

Float.toString()의 내부 코드도 살펴 보았습니다. 전화는 FloatingDecimal(f).toJavaFormatString()입니다.

public static void main(String[] args) {        
    Float f = Float.intBitsToFloat(1342177280); 

    String simpleString = new BigDecimal(f).toPlainString(); 
    System.out.println("simpleString value " + simpleString); 

    String withToString = new BigDecimal(Float.toString(f)).toPlainString(); 
    System.out.println("withToString value " + withToString); 
} 

출력 BigDecimal의 생성자 간단이

simpleString value 8589934592 
withToString value 8589934600 //here value changed 
+1

플로트를 더블로 변경하십시오. 플로트의 정밀도보다 가수 부분이 더 큽니다. –

+1

단순히 Float.toString이 이것을 반환하기 때문에 : 8.5899346E9 그래서 BigDecimal은 왼쪽에있는 것만 사용할 수 있습니다 – AxelH

+0

예, Float의 toString 구현에서 선택한 정밀도처럼 보입니다. –

답변

1

같다. 나에게 문자열을 줘, 나는 그것으로 숫자를 만들 것이다. 네가 나에게 숫자를 주면 나는 그의 가치를 직접 사용할 것이다.

예제에서 문자열 생성은 8.5899346E9처럼 보이기 때문에 일반 숫자의 값은 8589934600입니다. float 인스턴스를 보내면 가능한 한 정확하게 값을 다시 작성하기 위해 비트와 함께 작동합니다 (추측).

관련 문제