int velMperMin = 667;
int distM = 70;
double movT = (distM/velMperMin)*60;
movtT
의 몫에서 double 값을 얻는 것은 6.30
와 동일하지만 0
있어해야합니다.정수
int velMperMin = 667;
int distM = 70;
double movT = (distM/velMperMin)*60;
movtT
의 몫에서 double 값을 얻는 것은 6.30
와 동일하지만 0
있어해야합니다.정수
나누기의 피연산자 중 하나를 이중 값으로 캐스트해야합니다. 이처럼 :
double movT = ((double)distM/velMperMin)*60;
코드는 정수 나누기 distM/velMperMin
을 수행하고 그 결과 0
인치 그런 다음 60을 곱합니다. 여전히 0
입니다. 그렇다면 double로 변환하면 0.0
이됩니다.
피연산자 중 하나를 double
으로 캐스팅하면 해당 나누기가 정수 나누기가 아닌 부동 소수점 나누기가되고 결과가 기대됩니다.
int/int
의 결과는 int
(70/667 = 0.xxx, 이는 0 임)입니다.
double movT = ((double) distM/velMperMin)*60;
를하거나 이중으로 변수 중 하나를 정의 : 당신은 분할 전 double
에 적어도 하나의 int
캐스팅해야합니다.
70/667
은 0
이므로 0 * 60
은 0
입니다.
distM 및 velMperMin은 모두 정수이며 결과가 1보다 작고 전체 int 수로 잘 리므로 0으로 나눕니다. 0으로 60을 곱하면 여전히 0입니다.
이것은 정상입니다. 정수 70/667을 사용할 때 0인데, 이중을 사용할 때 0,1049가됩니다. velMperMin 및 distM을 두 배로 변경하십시오.
정수형에서 수행되는 분할을 참조하십시오.
정수를 나눌 때 결과에 정수도 표시됩니다. 당신의 경우에는 70을 667로 나눕니다. 이것은 0과 10494를줍니다. 따라서 최종 결과는 0입니다. 우리는 십진수 값을 저장할 위치가 없습니다.
int division으로 들어 가지 않거나 int 결과를 얻습니다.
Double velMperMin = new Double(667);
Double distM = new Double(70);
Double movT = (distM/velMperMin * 60);
'Double'이 아니라 'double'을 의미하지 않습니까? –
아니요. 그건 잘못된 결론입니다. 프리미티브 double 또는 Double을 사용할 수 있습니다. 것은 : int division에서 double (또는 Double) 결과를 기대하지 말라. 다른 SO는 말했다. – Alfabravo
이 문제를 해결하는 가장 간단한 방법은 제 double
여러이다.
double movT = 60.0 * distM/velMperMin;
또는 그는 단지 이중으로 정의 할 수 있습니다. –
@Vash 아마도 어쩌면 자연스러운 정수인 기본 변수가있을 수 있지만 그럴 때 부동 소수점 산술을 수행하려고합니다. –