Toon posts:

[c++] rekenen met een float

Pagina: 1
Acties:
  • 179 views sinds 30-01-2008

Verwijderd

Topicstarter
Ik wil een een berekening uitvoeren om % te krijgen.
Dit is de code:

cgaugePercentage->Progress=((aantCFG/N)*100);

aantCFG is een int
N is #DEFINE N 1000

Wat ik ook probeer, ik krijg altijd nul uit. Alle gebruikte variabelen hebben een waarde. Zelfs als ik de variabele vervang door getallen, dus:

cgaugePercentage->Progress=((3/1000)*100);

komt er 0 uit.
Ik heb ook al de cgauge weg gelaten en vervangen door een float variabele, maar weer krijg ik die 0.

Wat doe ik fout?

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 07-09 08:58
3/1000 = 0 (grootste integer < 0.3)
3.0/1000.0 = 0.0029999998... ( grootste float < 0.3 )

Het resultaat van een deling van integers is een integer, dat je het resultaat in een float stampt maakt niet uit.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • whoami
  • Registratie: December 2000
  • Laatst online: 14:34
plus het feit dat progress een property is die de voortgang moet weergeven, een property die dus iedere keer moet verhoogd worden met het aantal steps ofzo...

In maxvalue stop je bv 200, by steps 1 en dan ga je je Progress property gaan ophogen.

https://fgheysels.github.io/


  • Juicy
  • Registratie: December 2000
  • Laatst online: 15:07
Op donderdag 23 mei 2002 12:17 schreef knien001 het volgende:
cgaugePercentage->Progress=((aantCFG/(N * 1.0))*100);
Op deze manier ziet de compiler N als een float en voert dus ook een "float-deling" uit. Anders wordt er een DIV uitgevoerd met hele getallen.

-


  • whoami
  • Registratie: December 2000
  • Laatst online: 14:34
Maar zoals MSalters al zei, is Progress een int property, dus als je 0.3 hebt, wordt die geconverteerd naar: 0

https://fgheysels.github.io/


  • Juicy
  • Registratie: December 2000
  • Laatst online: 15:07
Op donderdag 23 mei 2002 12:21 schreef MSalters het volgende:
3/1000 = 0 (grootste integer < 0.3)
3.0/1000.0 = 0.0029999998... ( grootste float < 0.3 )
Ik begrijp niet wat je hiermee bedoelt ... :?
Op donderdag 23 mei 2002 12:23 schreef whoami het volgende:
Maar zoals MSalters al zei, is Progress een int property, dus als je 0.3 hebt, wordt die geconverteerd naar: 0
Ik zie nergens staan dat deze property een int is ... Maar zelfs dan nog werkt het zoals ik heb beschreven. Echter 3 is minder dan 0.5% dus als integer wordt dit dan 0.

-


Verwijderd

Topicstarter
Op donderdag 23 mei 2002 12:23 schreef whoami het volgende:
Maar zoals MSalters al zei, is Progress een int property, dus als je 0.3 hebt, wordt die geconverteerd naar: 0
Progress is geen int maar een long. En dat is volgens mij toch een floating-type.

Maar dat maakt verder ook niets uit, uit mijn berekening komt (althans das de bedoeling) een getal en dat getal is de progress. Ik heb dus nix te maken met steps en zo.

  • Juicy
  • Registratie: December 2000
  • Laatst online: 15:07
Een long is echt geen float ...

-


  • Marcj
  • Registratie: November 2000
  • Laatst online: 16:03
Op donderdag 23 mei 2002 12:34 schreef knien001 het volgende:

[..]

Progress is geen int maar een long. En dat is volgens mij toch een floating-type.

Maar dat maakt verder ook niets uit, uit mijn berekening komt (althans das de bedoeling) een getal en dat getal is de progress. Ik heb dus nix te maken met steps en zo.
Nee long is een long int, geen float. Een double is een long float als het ware :)
Anders zo:
cgaugePercentage->Progress=( ( ((float)aantCFG) / N) * 100.0);

  • Juicy
  • Registratie: December 2000
  • Laatst online: 15:07
Op donderdag 23 mei 2002 12:37 schreef Marcj het volgende:

[..]

Nee long is een long int, geen float. Een double is een long float als het ware :)
Anders zo:
cgaugePercentage->Progress=( ( ((float)aantCFG) / N) * 100.0);
Probeer het eens in een compiler ... ;)
Dit werkt dus ook niet. N moet ook hier zijn (N * 1.0)

-


  • whoami
  • Registratie: December 2000
  • Laatst online: 14:34
Een long is een integer type en geen floating point type.

Tja, je mag er van mij mee werken zoals je wilt, maar uw manier is niet de goede. Je hebt een maxvalue, een minvalue en een Progress property. Die progress property geeft de vooruitgang aan tsn de minvalue en de maxvalue.

https://fgheysels.github.io/


  • Marcj
  • Registratie: November 2000
  • Laatst online: 16:03
Op donderdag 23 mei 2002 12:39 schreef Juicy het volgende:

[..]

Probeer het eens in een compiler ... ;)
Dit werkt dus ook niet. N moet ook hier zijn (N * 1.0)
Als je een float deelt door een int dan moet er toch weer een float uit komen :? Of anders ff :
cgaugePercentage->Progress=( ( ((float)aantCFG) / ((float)N) ) * 100.0);

vast te veel haakjes, maar liever te veel dan te weinig ;)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:35

.oisyn

Moderator Devschuur®

Demotivational Speaker

laat die floats even buiten beschouwing, die heb je helemaal niet nodig (aangezien het resultaat een int/long moet zijn :))

gewoon eerst vermenigvuldigen met 100, en daarna pas delen door N
yousa understand? :)

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.


Verwijderd

Topicstarter
Op donderdag 23 mei 2002 12:37 schreef Juicy het volgende:
Een long is echt geen float ...
Nee sorry, je hebt gelijk. Ik heb niet goed gelezen. :?

Verwijderd

Topicstarter
Hoe kan ik een float eigenlijk afronden op 1 cijfer achter de punt? Was dat niet iets met een procent teken?

  • The End
  • Registratie: Maart 2000
  • Laatst online: 16:40

The End

!Beginning

Op donderdag 23 mei 2002 12:41 schreef Marcj het volgende:

[..]

Als je een float deelt door een int dan moet er toch weer een float uit komen :? Of anders ff :
cgaugePercentage->Progress=( ( ((float)aantCFG) / ((float)N) ) * 100.0);

vast te veel haakjes, maar liever te veel dan te weinig ;)
Als je een float door een int deelt krijg je een int...

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:34
Op donderdag 23 mei 2002 13:43 schreef The End het volgende:

[..]

Als je een float door een int deelt krijg je een int...
Ahum? Als je een float deelt door een int krijg je volgens mij een float.
knien001:
Hoe kan ik een float eigenlijk afronden op 1 cijfer achter de punt? Was dat niet iets met een procent teken?
Dat met dat %-teken heeft daar niets mee te maken. % is de modulo operator.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Dat met dat %-teken heeft daar niets mee te maken. % is de modulo operator.
Ok, maar hoe rond ik dan af?

  • The End
  • Registratie: Maart 2000
  • Laatst online: 16:40

The End

!Beginning

Op donderdag 23 mei 2002 13:45 schreef whoami het volgende:

[knip]
Ahum? Als je een float deelt door een int krijg je volgens mij een float.
[\knip]
Ja, nm je hebt gelijk.... Ik was in de war met als je een int door een int deelt en het resultaat in een float propt.

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

C manual/tutorial/boek

niet ons alles laten voorkauwen

Doet iets met Cloud (MS/IBM)

Pagina: 1

Dit topic is gesloten.