Results 1 to 11 of 11

Thread: RealToInt?

  1. #1

    RealToInt?

    Weet iemand hoe ik een gatal (TReal) kan afronden naar een geheel getal en dan overzetten naar een integer?
    Lynx,
    www.animals.nl

  2. #2
    Onderstaand stukje code geeft twee mogelijkheden
    Code:
    var
      D: Double;
      I: Integer;
    begin
      D := 5.5;
      // cijfers achter de komma weglaten
      I := Trunc(D);  // I = 5
      // of afronden
      I := Round(D);  // I = 6
    end;
    Marco Hemmes

  3. #3
    Voor het afronden of omzetten van floating point getallen naar integer getallen zijn twee functies: Trunc en Round.

    Welke functie je het beste kan gebruiken hangt af van wat je met de cijfers achter de komma wilt.

    De functie Trunc neemt alleen de cijfers voor de komma over en gooit de rest weg.
    De functie Round rond echt af, >5 voor de komma +, <5 voor de komma -1.

    Overigens raad ik je aan het type double te gebruiken ipv real, reals worden nauwlijks meer gebruikt in Delphi en stammen nog uit het oude turbo pascal.

    Marcel Vroone

  4. #4
    Ik loop steeds vast bij het samen gebruiken van singles en integers (ik heb boeken maar die geven geen antwoord).
    Stel ik heb een single variable omdat ik die (niet zulke grote) getallen wil delen. Nu heb ik deze single variable nodig om bij een integer variable op te tellen en dat gaat niet. Er is alleen een functie om de single variable naar een string om te zetten en via die weg naar een integer maar dat is wel omslachtig. Ik zou dit erg graag willen weten want ik wil mijn code zo "strak" mogelijk houden.

  5. #5
    Je kan toch een single met een integer optellen?
    Als je het integer deel van een single wil bekomen dan zoek je Trunc
    DeX 3 Delphi := The ease of VB with the power of C; Zoekt en gij zult vinden

  6. #6
    Quote Originally Posted by Henkie View Post
    Je kan toch een single met een integer optellen?
    Als je het integer deel van een single wil bekomen dan zoek je Trunc
    Dit is wat ik wilde:
    Code:
      integerVar1:=int(singleVar2/1800); // of ":=(singleVar2/1800)".
    Hierbij kreeg ik de foutcode E2010 - incompatable filetypes: integer and extended. Nu heb ik onderstaande ingevuld en dat lijkt te werken
    Code:
    integerVar1:=trunc(singleVar2/1800);
    Dat zou ik dan ook voor de volgende opgave moeten gebruiken:
    Code:
    integerVar1:=trunc(singelVar3-integerVar2);
    Maar op de een of andere manier lijkt me dit niet echt de manier...
    Last edited by Marieke; 01-Mar-08 at 23:54.

  7. #7
    Wat je zoekt is niet / maar div
    Code:
    integerVar1 := singleVar2 div 1800;
    DeX 3 Delphi := The ease of VB with the power of C; Zoekt en gij zult vinden

  8. #8

    Thumbs up

    Okééé... - daar gaan we eens mee aan de slag.
    Bedankt voor het antwoord en straks zijn er misschien weer wat mensen gelukkig met mijn progje. http://www.xs4all.nl/~pannekmj/

    "Snel leren Programmeren - Delphi 7" van Thomas Binzinger blz. 121.

    (Ik zei al dat ik een boek had) Toch zou ik nog wel iets uitgebreider hierover informatie willen - in mijn andere boeken staat hier niet veel over vermeld.
    Last edited by Marieke; 02-Mar-08 at 11:18. Reason: Aanvulling.

  9. #9
    Quote Originally Posted by Henkie View Post
    Wat je zoekt is niet / maar div
    Code:
    integerVar1 := singleVar2 div 1800;
    Bovenstaande werkt niet (ook niet tussen haakjes).
    Foutcode: "Operator not applicable to this operand type".
    Code:
    integerVar := singleVar / 1800;
    Zo gaat het wel.

  10. #10
    Klopt, div voert een integer deling uit, maar verwacht ook dat beide getallen integers zijn. Singlevar zul je dus eerste moeten afronden voordat je de deling doet.
    Je kunt ook naderhand afronden, dus Round(Singlevar / deler). Het is maar net wat je wilt, maar je moet dat wel goed bepalen. Hiermee bepaal je tenslotte de uiteindelijke uitkomst. 4,8 / 2 = 2,4. Dit zal afgerond worden naar 2. Als je 4,8 eerst afrondt naar 5, dan zal je uitkomst (afgerond) 3 worden.

    Zoals al eerder gezegd zal de manier van afronden hierbij ook een rol spelen.
    -Ceil rondt alles af omhoog.
    -Trunc zal alles afkappen, evenals Fix, maar Trunc en Fix reageren wel weer anders met negatieve getallen.
    -Round rondt omhoog of omlaag, maar als je een fractie hebt van ,5 dan zal er worden afgerond naar het even getal.
    -SimpleRoundTo heeft mijn voorkeur. Deze rondt ,5 af omhoog, zoals je zelf ook altijd met rapportcijfers doet

    De vraag is dus vooral wat je wilt afronden, wanneer je moet afronden en hoe. Als je de definitie duidelijk hebt, dan kan de helpfile je wel uitleggen welke functie je ervoor moet gebruiken.
    1+1=b

  11. #11
    In mijn geval was het afronden niet het probleem maar het gebruik van verschillende types variabelen in dezelfde som. Maar toch namens alle beginners bedankt voor de uitleg...

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •