[asp.net | c#]Convert double to int?

Pagina: 1
Acties:

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 25-05 21:07
Hoi,

Met onderstaande code:
C#:
1
2
3
4
5
6
7
8
9
10
11
if(uploadimg.Width <= max_xwidth)
{
    width = uploadimg.Width;
    height = uploadimg.Height;
}
else    
{
    width = max_xwidth;
    height = (max_xwidth / uploadimg.Width) * uploadimg.Height;
    //height = 100; //< als deze wel "aanstaat" werkt het wel
}

krijg ik een foutmelding. (Out of Memory op GetThumbNailImage). Zodra ik height keihard zet op bijvoorbeeld 100 werkt het wel.

Ik heb er nog eens over nagedacht en het lijkt erop dat het resultaat van de berekening in height een double wordt.

Vervolgens ben ik gaan zoeken op:
cast double to int, convert double to int, double to int. Ik krijg alleen resultaten die Int32.Parse, Convert.ToInt(16/32 etc.) opleveren. Die allemaal geprobeerd, alleen voor zover ik weet / begrepen heb is dat om string naar ints te converteren.

Verder heb ik ook nog Math.Round geprobeerd. Daar krijg ik de foutmelding:

The call is ambiguous between the following methods or properties: 'System.Math.Round(decimal)' and 'System.Math.Round(double)'

Ik ben toch niet zo "aangeslagen" door het weekend? Je kan toch zonder problemen een double (misschien decimal) naar een int converten?

Heart..pumps blood.Has nothing to do with emotion! Bored


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

Ik ben geen C# genie (ken alleen de syntax van C), maar werkt dit niet gewoon?
C#:
1
height = (int)((max_xwidth / uploadimg.Width) * uploadimg.Height);

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 25-05 21:07
NMe84 schreef op 17 mei 2004 @ 10:15:
Ik ben geen C# genie (ken alleen de syntax van C), maar werkt dit niet gewoon?
C#:
1
height = (int)((max_xwidth / uploadimg.Width) * uploadimg.Height);
Helaas. Zo'n soort manier had ik ook geprobeerd.
Ik ben het nu heel vies aan het doen dmv een ArgumentException om te zien wat height nu precies is. Die geeft 0 terug. Lijkt erop dat het rekenen niet helemaal fris gaat.

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 00:01

Janoz

Moderator Devschuur®

!litemod

Herschrijf die berekening naar:
code:
1
height = max_width * uploadimg.Height / uploadimg.width;

Hierdoor hoef je niet eens te converteren naar doubles.


-----

Door eerst de vermenigvuldiging te doen stel je het afrronden uit. Een integer / operatie rond namelijk gewoon af (misschien zelfs wel floor). Hierdoor vermenigvuldig je uploadimg.Height met 0 waneer upload kleiner dan max (of de helft van max) is. Door de deling aan het eind te doen wordt er niet halverwege afgerond.

[ Voor 52% gewijzigd door Janoz op 17-05-2004 11:10 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 25-05 21:07
Janoz, mag ik vragen hoe jij daar bij komt?
Dat werkt inderdaad (gelukkig) maar ik zie niet echt het verschil in mijn berekening en die van jou.

Ik zie wel dat het anders geschreven is e.d. maar ik zie niet waarom dat zoveel anders zou zijn dan mijn berekening.

Edit: Ah, kijk, toch weer wat geleerd op de vroege maandagmorgen! Thanks.

[ Voor 44% gewijzigd door TeeDee op 17-05-2004 10:21 ]

Heart..pumps blood.Has nothing to do with emotion! Bored