정수

2012-02-01 6 views
2
int velMperMin = 667; 
int distM = 70; 
double movT = (distM/velMperMin)*60; 

movtT의 몫에서 double 값을 얻는 것은 6.30와 동일하지만 0있어해야합니다.정수

답변

6

나누기의 피연산자 중 하나를 이중 값으로 캐스트해야합니다. 이처럼 :

double movT = ((double)distM/velMperMin)*60; 

코드는 정수 나누기 distM/velMperMin을 수행하고 그 결과 0인치 그런 다음 60을 곱합니다. 여전히 0입니다. 그렇다면 double로 변환하면 0.0이됩니다.

피연산자 중 하나를 double으로 캐스팅하면 해당 나누기가 정수 나누기가 아닌 부동 소수점 나누기가되고 결과가 기대됩니다.

+0

또는 그는 단지 이중으로 정의 할 수 있습니다. –

+1

@Vash 아마도 어쩌면 자연스러운 정수인 기본 변수가있을 수 있지만 그럴 때 부동 소수점 산술을 수행하려고합니다. –

1

int/int의 결과는 int (70/667 = 0.xxx, 이는 0 임)입니다.

double movT = ((double) distM/velMperMin)*60; 

를하거나 이중으로 변수 중 하나를 정의 : 당신은 분할 전 double에 적어도 하나의 int 캐스팅해야합니다.

1

70/6670이므로 0 * 600입니다.

0

distM 및 velMperMin은 모두 정수이며 결과가 1보다 작고 전체 int 수로 잘 리므로 0으로 나눕니다. 0으로 60을 곱하면 여전히 0입니다.

0

이것은 정상입니다. 정수 70/667을 사용할 때 0인데, 이중을 사용할 때 0,1049가됩니다. velMperMin 및 distM을 두 배로 변경하십시오.

0

정수형에서 수행되는 분할을 참조하십시오.

정수를 나눌 때 결과에 ​​정수도 표시됩니다. 당신의 경우에는 70을 667로 나눕니다. 이것은 0과 10494를줍니다. 따라서 최종 결과는 0입니다. 우리는 십진수 값을 저장할 위치가 없습니다.

0

int division으로 들어 가지 않거나 int 결과를 얻습니다.

Double velMperMin = new Double(667); 
Double distM = new Double(70); 
Double movT = (distM/velMperMin * 60); 
+0

'Double'이 아니라 'double'을 의미하지 않습니까? –

+0

아니요. 그건 잘못된 결론입니다. 프리미티브 double 또는 Double을 사용할 수 있습니다. 것은 : int division에서 double (또는 Double) 결과를 기대하지 말라. 다른 SO는 말했다. – Alfabravo

4

이 문제를 해결하는 가장 간단한 방법은 제 double 여러이다.

double movT = 60.0 * distM/velMperMin;