문제

다른 Bruce Eckel 운동에서 내가 작성한 코드는 방법을 취하고 다른 클래스에서 가치를 변경합니다. 내 코드는 다음과 같습니다.

class Big {
  float b;
}

public class PassObject {
  static void f(Letter y) {
    y.c = 'z';
  } //end f()
  static void g(Big z) {
    z.b = 2.2;
  }

  public static void main(String[] args ) {
    Big t = new Big();
    t.b = 5.6;
    System.out.println("1: t.b : " + t.b);
    g(x);
    System.out.println("2: t.b: " + t.b);
  } //end main
}//end class

"정밀도 손실 가능성"이라는 오류가 발생합니다.

PassObject.java:13: possible loss of precision
found: double
required : float   z.b = 2.2
passobject.java:20: possible loss of precision
found : double
required : float   t.b = 5.6

캔트 doubles be floats도?

미리 감사드립니다

도움이 되었습니까?

해결책

그렇습니다.하지만 플로트임을 지정해야합니다. 그렇지 않으면 두 배로 취급됩니다.

z.b = 2.2f

숫자의 끝에있는 'f'는 두 배가 아닌 플로트로 만듭니다.

Java는 플로트로 자동으로 두 배를 좁히지 않습니다.

다른 팁

아니요, 플로트는 자동으로 복식으로 향상 될 수 있지만, 더블은 더 큰 범위를 가지기 때문에 명시 적 주조 없이는 두 배의 수레가 될 수 없습니다.

플로트 범위입니다 1.40129846432481707e-45 에게 3.40282346638528860e+38

이중 범위는 4.94065645841246544e-324d 에게 1.79769313486231570e+308d

기본적으로 Java는 10 진수를 취급합니다 (예 :4.3") a double 달리 지정하지 않는 한 a float 숫자 다음에 F를 추가하여 (예 :4.3f").

두 줄에 같은 문제가 있습니다. 첫째, 소수 문자 그럴은 컴파일러에 의해 더블로 해석됩니다. 그런 다음 할당하려고합니다 b, 이것은 유형입니다 float. a double 64 비트이고 a float 비트가 32 비트입니다 (참조 Java의 프리미티브 문서), Java는 당신에게 float 내부에 맞을 수 없습니다 double. 해결책은 소수점 리터럴에 f를 추가하는 것입니다.

반대를하려고한다면 (즉, 할당 float a double), 당신이 맞출 수 있기 때문에 괜찮을 것입니다. floata 내에서 32 비트 double64.

플로트를 사용하지 마십시오. 그것을 사용해야할만한 충분한 이유는 없으며 10 년이 넘지 않았습니다. 더블 만 사용하십시오.

can't doubles be floats as well?

아니요. 각 값 또는 변수에는 정확히 하나의 유형 (Double, Float, Int, Long 등)이 있습니다. 그만큼 자바 언어 사양 한 유형의 값을 다른 유형의 변수에 할당하려고 할 때 발생하는 일이 정확히 나타납니다. 일반적으로 "더 작은"값의 "더 큰"값의 "더 큰"유형에 대한 할당은 허용되고 암시 적으로 허용되지만, 대상 유형이 너무 "작은"원인 유형의 모든 값을 보유하기에는 정보가 손실 될 수있는 과제는 콘크리트 값이 대상 유형에 맞더라도 컴파일러.

그렇기 때문에 컴파일러는 플로트 변수에 이중 값 (문자 그대로)을 플로트 변수에 할당하면 정보를 잃을 수 있으며 값을 플로트로 만들거나 명시 적으로 캐스팅하여이를 배치해야한다고 불평합니다.

혼란을 일으키는 영역 중 하나는 계산입니다. 이는 기술적 인 이유로 암시 적으로 "확대"되기 때문입니다. 따라서 두 개의 반바지를 곱하고 결과를 짧은 일에 할당하려고하면 계산 결과가 int이기 때문에 컴파일러는 불평합니다.

플로트 범위는 두 배보다 낮으므로 플로트는 쉽게 두 배로 표시 될 수 있지만 반대는 불가능합니다. 왜냐하면 우리는 플로트 범위를 벗어난 값을 가져 오면 컨벤션 중에 정확한 데이터를 잃게됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top