2010-03-08 7 views
4

이미지를 올바르게 표시하기 위해 무언가를 쓰려고 노력하고있다. 두 개의 숫자 "breedtePlaatje"와 "hoogtePlaatje"가 있습니다. 내가 "800"과 "500"으로 돌아가는 값을 가진 2 개의 vars를로드 할 때 "verH"가 (500/800) = 0,625가 될 것으로 기대합니다.C# 부문이 내가 예상 한대로 돌아 가지 않는다.

int breedtePlaatje = Convert.ToInt32(imagefield.Width); 
int hoogtePlaatje = Convert.ToInt32(imagefield.Height); 

//Uitgaan van breedte plaatje 
if (breedtePlaatje > hoogtePlaatje) 
{ 
    double verH = (hoogtePlaatje/breedtePlaatje); 
    int vHeight = Convert.ToInt32(verH * 239); 

    mOptsMedium.Height = vHeight; 
    mOptsMedium.Width = 239; 

    //Hij wordt te klein en je krijgt randen te zien, dus plaatje zelf instellen 
    if (hoogtePlaatje < 179) 
    { 
     mOptsMedium.Height = 179; 
     mOptsMedium.Width = 239; 
    } 
} 

내 접근 방식에 대한 모든 팁 사랑스러운 aswell 것 : verH = 0 ..

의 가치 상점이 코드입니다.

답변

11

int를 int로 나누면 int가됩니다.

double verH = (hoogtePlaatje/breedtePlaatje); 

할당의 오른쪽은 정수 값입니다.

번식기 및/또는 번식기를 이중으로 변경하면 예상 한 답변을 얻을 수 있습니다.

+0

감사합니다. DOOOOH !!! :) – Younes

2

나는 C# .NET을 사용한 적이 있지만, 아마도 당신은 다음과 같이 두 배로 변수 중 하나를 캐스팅해야합니다

double verH = (double)hoogtePlaatje/breedtePlaatje; 
6

정수 나누기는 정수가 발생합니다은 분할 결과로 반환된다.

결과를 부동 소수점으로 사용하려면 나누기 매개 변수 중 하나가 부동 소수점이어야합니다. 이 중 하나를 부동으로 캐스팅하면됩니다.

double verH = (double)hoogtePlaatje/breedtePlaatje; 

또는

double verH = hoogtePlaatje/(double)breedtePlaatje; 

이 부문에 대한 the C# spec 참조하십시오. 당신의 int로 int를 나누면

double verH = double (hoogtePlaatje)/breedtePlaateje; 

, 당신이 잘린 답변을 얻을 것이다 :

1

이 시도해보십시오. 그들 중 하나를 2 배로 던지면 전체 부서가 2 배가됩니다.

4

두 개의 정수를 나눌 때 C#은 소수 부분을 버려지는 integer division을 사용합니다. 귀하의 경우에는 당신이 있어요 :

500/800 = 0 + 5/8 

어느, 소수 부분 폐기, 제공 :

500/800 = 0 
포인트 부문 부동 얻으려면 따라 하나 double, float 또는 decimal에 인수 중 하나를 던져

필요한 정밀도 수준에서 다른 인수가 암시 적으로 같은 유형으로 변환되고 정수가 정수 규칙 대신 부동 소수점 규칙을 사용하여 나눗셈이 수행됩니다.

double result = (double)breedtePlaatje/hoogtePlaatje ; 
+0

괜찮은 설명을 주셔서 감사합니다! – Younes

관련 문제