programing

어떻게 하면 2개의 int를 나누면 다른 int가 아닌 float가 생성됩니까?

luckcodes 2022. 8. 7. 18:11

어떻게 하면 2개의 int를 나누면 다른 int가 아닌 float가 생성됩니까?

브루스 에켈스가 속도를 계산하는 연습에서v = s / t여기서 s와 t는 정수입니다.어떻게 하면 부서가 뜨게 만들 수 있지?

class CalcV {
  float v;
  float calcV(int s, int t) {
    v = s / t;
    return v;
  } //end calcV
}

public class PassObject {

  public static void main (String[] args ) {
    int distance;
    distance = 4;

    int t;
    t = 3;

    float outV;

    CalcV v = new CalcV();
    outV = v.calcV(distance, t);

    System.out.println("velocity : " + outV);
  } //end main
}//end class

피연산자 두 개 중 한 개를 먼저 물에 던져주세요.

v = (float)s / t;

캐스팅은 디비전보다 우선순위가 높기 때문에 디비전보다 먼저 발생합니다.

규칙에서는 어느 하나의 피연산자가 부동소수점 타입일 경우 다른 피연산자가 적분일지라도 그 연산은 부동소수점 연산이라고 되어 있기 때문에 다른 피연산자는 컴파일러에 의해 플로트에 효과적으로 캐스팅됩니다.자바 언어 사양, § 4.2.4 및 § 15.17

시험:

v = (float)s / (float)t;

플로트에 int를 캐스팅하면 부동소수점 분할이 가능합니다.

캐스팅은 딱 하나만 하면 돼요.

정수 중 하나를 플로트에 캐스팅하여 부동 소수점 산술로 연산을 강제로 수행합니다.그렇지 않으면 항상 정수 산술이 선호됩니다.그래서:

v = (float)s / t;

코드 판독성에 미치는 영향을 줄이기 위해 다음과 같이 제안합니다.

v = 1d* s/t;

분자나 분모를 띄울 수 있어요

int 연산은 보통 int를 반환하므로 연산 번호 중 하나를 변경해야 합니다.

둘 중 하나라도 캐스팅할 수 있지만 일관성을 위해 v = (s)s / (s)와 같은 것이 작동하지 않도록 두 가지를 모두 명시적으로 캐스팅하는 것이 좋습니다.

부동소수점 산술로 연산을 강제로 수행하려면 부동소수점 정수/정수 중 하나를 캐스팅합니다.그렇지 않으면 항상 정수 산술이 선호됩니다.그래서:

1. v = (float)s / t;
2. v = (float)s / (float)t;

JLS 표준

JLS 7 15.17.2. Division Operator /는 다음과 같이 말합니다.

정수 나눗셈은 0을 향해 반올림합니다.즉, 이진수 승급 후 정수인 피연산자 n과 d에 대해 생성되는 몫은 |d · q | | |n|을 만족시키면서 크기가 가능한 한 큰 정수 값 q이다.또한 |n| | |d| 및 n과 d의 부호가 같을 경우 q는 양수이지만 |n| | |d| 및 n과 d의 부호가 반대일 경우 q는 음수입니다.

이래서1/2플로트를 주지 않습니다.

와 같이 한쪽만 플로팅으로 변환(float)1/215.17로 충분합니다. 곱셈 연산자는 다음과 같이 말합니다.

피연산자에 대해 이진수 승격이 수행됩니다.

5.6.2. 이진수 프로모션 내용:

  • 어느 하나의 피연산자가 double 유형인 경우 다른 피연산자는 double로 변환됩니다.
  • 그렇지 않으면, 어느 피연산자가 플로트 형식인 경우, 다른 피연산자는 플로트로 변환됩니다.

이것을 시험해 보세요.

class CalcV 
{
      float v;
      float calcV(int s, int t)
      {
          float value1=s;
          float value2=t;
          v = value1 / value2;
          return v;
      } //end calcV
}

언급URL : https://stackoverflow.com/questions/787700/how-to-make-the-division-of-2-ints-produce-a-float-instead-of-another-int