2013-12-12 3 views
0

저는 게임에 대한 반응 형 디자인 작업을하고 있습니다. 화면 크기에 따라 개체의 위치를 ​​다시 계산합니다. 좋은 계산을하고 있지만 내 함수는 항상 0을 반환하는 잘못된 결과를 제공합니다. Int가 되려면 반환 값이 필요합니다. 여기간단한 구분을 할 수 없습니다.

코드 : 중단 점

public int rdnW(int a) 
{ 
    double b; 

    b = (a/800 * 100); 
    return (int)(b * Widths/100); 
} 

내가 항상 그 B = 0이 참조; 모든 요소가 정수이기 때문에 표현이 integer로 평가되기 때문입니다 내 경우 A의 = 258 감사

+1

나는 당신의 제목을 편집했습니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackexchange.com/questions/19190/)"합의가 "아니오, 그렇지 않아야한다"는 것을 참조하십시오. –

+1

아마도 점수가 중복되는 게시물은 가까운 투표를하지 않고도 6 개의 답변을 가지고 있다고 생각하기가 어렵습니다. – devnull

답변

1

당신은 너무 계산의 결과를 두 배로 a 캐스팅해야합니다 것입니다 반올림하지 마라.

b = ((double)a/800 * 100); 
+1

"더블을 던지기"를 의미하는 것이지, "더블을 선언하십시오"가 아니라고 생각합니다 –

+0

@ JohnSaunders right. –

+0

감사합니다. – Gabson

3

사용

b = ((double)a/800 * 100); 

. 표현식을 평가 한 후 double 변수에 저장됩니다.

또한 비슷한을 사용할 수 있습니다

b = (a/800.0 * 100); 

또는

b = (a/800 * 100.0); //in your case this will return zero because (a/800) will be evaluated as integer 

요인 중 적어도 하나는 그 표현 컴파일러에 "말"에 두 번 할 필요가있다 있습니다 double 유형

+0

마지막 문제는 (전체/전체) 문제를 해결하지 못하는'(a/800) * 100.0'으로 평가 될 것입니다. – delnan

+0

예 당신 말이 맞습니다 –

7

정수 나누기를 수행하고 있습니다. 이중으로 double 또는 float에 값 중 하나를 주조 또는 상수 중 하나를 지정 즉, 100.0 대신 100

의 예를

b = (a/800.0 * 100.0); 
2

당신이 수행하는 것은 여기 정수 나누기이기 때문입니다. ab이 정수이고 a < b 인 경우 a/b은 할당 한 유형이나 유형에 관계없이 항상 0을 제공합니다.

원인에 따라 a800 미만일 수 있으므로 결과적으로 0이 표시됩니다.

.NET에는 3 가지 유형의 분류가 있습니다.

정수 나누기 부로부터;

분할 제로 향해 결과를 반올림하고 의 절대 값이 결과는 두 개의 피연산자의 지수 의 절대 값보다 작은 가장 큰 가능한 정수이다./ Operator (C# Reference)

두 정수를 나눌에서

는, 결과는 항상 정수입니다. 예제의 경우 7/3의 결과는 2입니다. 7/ 3의 나머지를 결정하려면 나머지 연산자 (%)를 사용하십시오. 합리적인 숫자 또는 분수로 지수를 얻으려면 배수 또는 제수 유형 float를 입력하거나 double을 입력하십시오.

솔루션으로, 당신은 캐스트 할 수 있습니다 더블 당신의 a 또는 800 같은;

b = ((double)a/800 * 100); 

또는

b = (a/800d * 100); 
관련 문제