어떻게 하면 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/2
15.17로 충분합니다. 곱셈 연산자는 다음과 같이 말합니다.
피연산자에 대해 이진수 승격이 수행됩니다.
- 어느 하나의 피연산자가 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
'programing' 카테고리의 다른 글
Vue 속성 정의 주의(인스턴스 (0) | 2022.08.07 |
---|---|
Array List를 문자열로 변환하는 가장 좋은 방법 (0) | 2022.08.07 |
NUXTJS에서의 디폴트루트 설정 방법 (0) | 2022.08.07 |
pthread_cond_wait에 스플리어스 웨이크업이 발생하는 이유는 무엇입니까? (0) | 2022.08.07 |
Java/Spring에서 Scala/Lift를 사용하는 이유는 무엇입니까? (0) | 2022.08.07 |