2014-09-02 1 views
-4

이 질문에 대한 답변 (Google 검색을 할 때 찾을 수 없음)이 확실하지 않습니다. http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html 수학 클래스 제곱근 메서드가 double을 반환하는 것으로 나타났습니다. 필자는 전체 평방근 (4, 9)이있는 정수로 일식 계산을 해 보았습니다. 그 중 네 개의 제곱근은 항상 소수점 하나 (4.0, 9.0)로 부동 소수점 값을 반환한다는 것을 알았습니다. 내가 왜 여분의 십진수를 반환했는지 궁금했다. 나는 int가 double 값으로 간주 될 수도 있다고 생각했다. 내가 당신이 더 많은 메모리를 절약 원인이 단지 하나 더 의미가 반환에 심지어 왜 math.sqrt는 부동 소수점을 소수점 하나의 값으로 반환하나요?

public static double control(){ 
    return 1; 
} 

그것을 밖으로 테스트 그냥 1

을 반환 유효 보았다 (내가 추측에 더 많은 메모리가 여분의 소수점을 저장하는 데 필요)
+0

아니요, int는 double과 같다고 볼 수 없습니다. (int) 4와 (double) 4는 완전히 다른 내부 값을 갖습니다. 대부분의 int는 정확하게 float로 표현 될 수 없습니다. (float) 4 실제로는 3.9999999999xxxxxx –

+0

은 int가 아니지만 유효한 double x = 6입니까? – committedandroider

+0

float <-> int가 정확한 값을 갖는 값이 있지만 모든 정수가 부동 소수점으로 정확하게 표현 될 수 없다고 가정하는 것이 더 쉽습니다. 하지만 네, 이중이라고 말하면 6은 "떠 다니게"될 것입니다. 그러나 그것은 내부적으로 5.9999xxx가 될 것이라는 것을 의미합니다. –

답변

1

[I] [Math.sqrt (x)는 x가 완전한 정사각형]은 항상 소수점 1 자리의 부동 소수점 값을 반환한다는 것을 알게되었습니다.

이중 값의 특정 인쇄 된 표현과 값 자체를 혼동하고 있습니다. double에는 소수점이 없습니다. double은 특정 실수 (예 : 4)를 나타내는 비트 패턴입니다.

소수점은 실제 숫자로만 구성된 십진수에만 표시됩니다. "0.25"라고 쓰면 분명히 소수점이 생깁니다. "1/4"라고 쓰면 소수점이 없습니다. 그러나 그것들은 같은 실수의 두 가지 다른 표현입니다. Java 표현식 1.0/4.0에서 반환하는 double 값을 나타내는 특정 비트 패턴도 마찬가지입니다.

Double.toString (4)가 "4"를 반환하는 대신 "4.0"이라는 문자열을 반환하는 이유를 모르겠지만 누군가가 Java 언어의 숫자 리터럴과 일관성을 유지하려고한다고 생각합니다. 프로그램에 "4"가 표시되면 이는 int 리터럴이고 프로그램에 "4.0"이 표시되면 이중 리터럴입니다.

-1

이 메서드는 double을 반환합니다. 메서드가 설정된 반환 형식 때문에 double로 표시됩니다. 이에 대한 해결책이 stackoverflow에 있습니다. 4.0이라고 말하면 in을 반환하고 그렇지 않으면 double을 표시합니다. Solution on stackoverflow

+0

그건 그가 요구하는 것이 아닙니다. 데이터 유형과 저장소에 대한 이해가 부족하다고 생각합니다. – Bren