Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C#] Groot getal omzetten tussen 0 en 100

Pagina: 1
Acties:

  • Saven
  • Registratie: December 2006
  • Laatst online: 21-11 09:51

Saven

Administrator

Topicstarter
Hola,
Een hele vage topictitel, maar ik weet zo gauw niet hoe ik het beter in het kort moet verwoorden. Het komt eigenlijk op het volgende neer:

Ik heb een bestand, de lengte daarvan is (willekeurig) 384892349. Dat bestand kan afgespeeld worden en dan krijg ik een huidige positie. Die positie is bijv. 94933493. Ik wil de positie op een control weergeven, maar die control heeft de max value van 100. Ik moet die huidige positie dus omrekenen naar iets wat tussen de 0 en de 100 zit.

Uit een verleden met arduino kan ik me herinneren dat hiervoor wel een functienaam bestaat, maar ik zou echt niet meer weten wat dat is, en omdat ik het probleem niet goed kan omschrijven kom ik ook niks nuttigs tegen op google.

Zelf heb ik al e.e.a. proberen te berekenen, maar daar kwam ik niet zo ver mee :') kreeg nooit wat ik wilde, wat logisch is omdat ik maar wat aan zat te rommelen.

De max value van die control kan evt ook omhoog, maar ik wil het graag zo oplossen :)

Iemand die mij een duwtje in de juiste richting kan geven? Thanks

  • Nvidiot
  • Registratie: Mei 2003
  • Laatst online: 03-06 16:38

Nvidiot

notepad!

huidige positie / lengte * 100 en dan afronden naar gehele getallen?

[ Voor 13% gewijzigd door Nvidiot op 20-04-2014 17:25 ]

What a caterpillar calls the end, the rest of the world calls a butterfly. (Lao-Tze)


  • Saven
  • Registratie: December 2006
  • Laatst online: 21-11 09:51

Saven

Administrator

Topicstarter
C#:
1
(Player.getLength() / Player.getPos()) * 100;

Had ik al geprobeerd, maar dan begint hij met een groot getal (bijv 4100) en dan wordt dat steeds lager (logisch eigenlijk ook)

C#:
1
(Player.getPos() / Player.getLength()) * 100;

blijft 0 geven

[ Voor 47% gewijzigd door Saven op 20-04-2014 17:44 ]


  • Nvidiot
  • Registratie: Mei 2003
  • Laatst online: 03-06 16:38

Nvidiot

notepad!

Die 2 getallen zijn gehele getallen, en blijkbaar doet C# een integer deling. Je moet (tenminste) een van de twee even omzetten naar een floating-point getal en daarna delen. Iets als:

C#:
1
(float(Player.getPos()) / Player.getLength()) * 100

What a caterpillar calls the end, the rest of the world calls a butterfly. (Lao-Tze)


  • Saven
  • Registratie: December 2006
  • Laatst online: 21-11 09:51

Saven

Administrator

Topicstarter
Thanks dat was hem idd :)

  • bwerg
  • Registratie: Januari 2009
  • Niet online

bwerg

Internettrol

In het algemeen is het met integers daarom verstandig éérst de vermenigvuldiging te doen en daarna de deling, dus (pos*100/length). Maar het concrete voorbeeld is een vrij groot getal, dus let op dat je daarmee niet boven de maximale waarde van een 32-bit int komt (of een long gebruiken of hoe dat in C# ook moge heten).

Puur ter lering ende vermaeck, want een float werkt natuurlijk al prima.

Heeft geen speciale krachten en is daar erg boos over.


  • Flapmo
  • Registratie: April 2000
  • Laatst online: 11:00

Flapmo

and back is gigi!

Een topic starten voor omrekenen naar procenten, ga je schamen :p :+ (NOFI).

[ Voor 7% gewijzigd door Flapmo op 22-04-2014 13:05 ]

"The purpose of computing is insight, not numbers." -- Richard Hamming


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:33

.oisyn

Moderator Devschuur®

Demotivational Speaker

Nvidiot schreef op zondag 20 april 2014 @ 17:36:
Die 2 getallen zijn gehele getallen, en blijkbaar doet C# een integer deling. Je moet (tenminste) een van de twee even omzetten naar een floating-point getal en daarna delen. Iets als:

C#:
1
(float(Player.getPos()) / Player.getLength()) * 100
Of je laat het hele gebruik van floats achterwege en je vermenigvuldigt eerst met 100 alvorens de deling te doen

.edit: Of ik lees eerst de hele topic om erachter te komen dat dat al gezegd is.

[ Voor 7% gewijzigd door .oisyn op 22-04-2014 14:45 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Saven
  • Registratie: December 2006
  • Laatst online: 21-11 09:51

Saven

Administrator

Topicstarter
Flapmo schreef op dinsdag 22 april 2014 @ 13:05:
Een topic starten voor omrekenen naar procenten, ga je schamen :p :+ (NOFI).
Kon idd niet meer zo helder nadenken :')

  • omgwtfbbq
  • Registratie: Juli 2007
  • Laatst online: 12:02
Als je je nog afvraagt hoe de functie bij Arduino heet: map

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
.oisyn schreef op dinsdag 22 april 2014 @ 14:44:
[...]


Of je laat het hele gebruik van floats achterwege en je vermenigvuldigt eerst met 100 alvorens de deling te doen

.edit: Of ik lees eerst de hele topic om erachter te komen dat dat al gezegd is.
Lijkt me niet zo slim om als je een groot getal gaat omzetten, het eerst nog eens 2 decimale posities groter te maken. Dat gaat compleet fout als je tegen MaxValue aan zit en aangezien we het hier over externe bestanden met willekeurige grootte hebben, kun je nooit echt garanderen dat dat niet gebeuren gaat.

[ Voor 11% gewijzigd door R4gnax op 23-04-2014 01:36 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:33

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik durf de garantie wel te geven dat we in ons leven geen bestanden tegen gaan komen die groter zijn dan 264 / 100. En als je bestandgrootte met een 32 bits int representeert dan heb je eigenlijk al een ander probleem.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1