[Delphi]Afronden naar boven

Pagina: 1
Acties:
  • 306 views sinds 30-01-2008
  • Reageer

  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 01:43
Hoe rond ik een getal in delphi altijd af naar boven?
Ik moet een getal uit een TEdit halen, dat getal moet altijd door 4 gedeeld worden en de uitmomst daarvan moet naar boven worden afgerond.
Ik dacht door er 0.5 bij op te tellen en dan de round() functie te gebruiken, maar daar klopt dus nix van (12/4=3 ; 3+0.5=3.5 ; 3.5 >4)
Denk foutje :)

  • Tim
  • Registratie: Mei 2000
  • Laatst online: 04-08-2025

Tim

heeft delphi niet iets van een ceil functie?

  • Bart Coppens
  • Registratie: April 2000
  • Laatst online: 25-11-2021
Round het getal. Is dat kleiner dan het oorspronkelijke getal, tel er dan 1 bij op. Klaar :)

Copyright Auteur heeft Tweakers.net BV geen exclusieve licentie op bovenstaande post verleend. Voorafgaande en uitdrukkelijke schriftelijke toestemming van Tweakers.net BV is dus niet noodzakelijk voor het vermenigvuldigen van bovenstaande post


  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 31-03 16:47

CyberSnooP

^^^^ schrijft --->

Press F1 for Help

|_____vakje______|


  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 01:43
Op zondag 26 mei 2002 14:53 schreef Bart Coppens het volgende:
Round het getal. Is dat kleiner dan het oorspronkelijke getal, tel er dan 1 bij op. Klaar :)
JA TOCH :)
Thx man!
Die Ceil functie kreeg ik trouwens niet voor elkaar, maar dat boeit dus niet meer :)

  • jhksema
  • Registratie: Januari 2002
  • Laatst online: 27-03 20:36
Op zondag 26 mei 2002 14:53 schreef Bart Coppens het volgende:
Round het getal. Is dat kleiner dan het oorspronkelijke getal, tel er dan 1 bij op. Klaar :)
Dit gaat verkeerd:

Round(0.5) = 1
Er 1 bij optellen geeft 2, maar Ceil(0.5) = 1!
Dus gebruik i.p.v. round trunc!

  • Bart Coppens
  • Registratie: April 2000
  • Laatst online: 25-11-2021
Je hebt gelijk, was klein denkfoutje met grote gevolgen :o Zo zie je maar weer, alles eerst zelf nog eens beredeneren ook al wordt beweerd dat het wel werkt :)

Copyright Auteur heeft Tweakers.net BV geen exclusieve licentie op bovenstaande post verleend. Voorafgaande en uitdrukkelijke schriftelijke toestemming van Tweakers.net BV is dus niet noodzakelijk voor het vermenigvuldigen van bovenstaande post


Verwijderd

Op zondag 26 mei 2002 15:17 schreef jhksema het volgende:

[..]

Dit gaat verkeerd:

Round(0.5) = 1
Er 1 bij optellen geeft 2, maar Ceil(0.5) = 1!
Dus gebruik i.p.v. round trunc!
Uhuh! als het kleiner is dan het oorspronkelijke getal.. 1 is groter dus je hoeft er nix bij op te tellen.. :)

  • Bart Coppens
  • Registratie: April 2000
  • Laatst online: 25-11-2021
Dan had ik toch gelijk *zucht* Is lesje voor mij: niet direct alle kritiek aanvaarde.
Alleen weet ik niet welk effect je beoogt bij negatieve waarden, dus moet je er als dat nodig zou zijn wel een abs-je bijzetten.

Copyright Auteur heeft Tweakers.net BV geen exclusieve licentie op bovenstaande post verleend. Voorafgaande en uitdrukkelijke schriftelijke toestemming van Tweakers.net BV is dus niet noodzakelijk voor het vermenigvuldigen van bovenstaande post


  • nightowl
  • Registratie: April 2002
  • Laatst online: 14-03-2009

nightowl

always too early to sleep

Op zondag 26 mei 2002 14:51 schreef FallenAngel666 het volgende:
Hoe rond ik een getal in delphi altijd af naar boven?
Ik moet een getal uit een TEdit halen, dat getal moet altijd door 4 gedeeld worden en de uitmomst daarvan moet naar boven worden afgerond.
Ik dacht door er 0.5 bij op te tellen en dan de round() functie te gebruiken, maar daar klopt dus nix van (12/4=3 ; 3+0.5=3.5 ; 3.5 >4)
Denk foutje :)
Een andere oplossing is door er niet 0.5 bij op te tellen maar 0.99 en dan de integer te pakken:

12/3=4 + 0.99 = 4.99 -> int(4.99) = 4

Werkt sneller imho

suk6 ;)

Ik pas in mijn jas. Mijn jas past in mijn tas. Dus ik pas in mijn tas.


  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 01:43
Op zondag 26 mei 2002 15:39 schreef TimD het volgende:

[..]

Uhuh! als het kleiner is dan het oorspronkelijke getal.. 1 is groter dus je hoeft er nix bij op te tellen.. :)
Idd, werkt als een tiet!
code:
1
2
3
rekenom:=StrToInt(MeAantal.Text)/4;
uitkomst:=Round(StrToInt(MeAantal.Text)/4);
if uitkomst < rekenom then uitkomst:=uitkomst+1;

Verwijderd

Het lijkt me handiger om gewoon de round functie te gebruiken. Al zou het bovenstaande goed werken. Maar er is geen enkel verschil in functionaliteit/resultaat in het bovenstaande en de ingebakken functie 'round' in Delphi.

Het voorbeeld uit de Delphi-help:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
var
  S, T: string;
begin
  Str(1.4:2:1, T);
  S := T + ' rounds to ' + IntToStr(Round(1.4)) + #13#10;
  Str(1.5:2:1, T);
  S := S + T + ' rounds to ' + IntToStr(Round(1.5)) + #13#10;
  Str(-1.4:2:1, T);
  S := S + T + ' rounds to ' + IntToStr(Round(-1.4)) + #13#10;
  Str(-1.5:2:1, T);
  S := S + T + ' rounds to ' + IntToStr(Round(-1.5));
  MessageDlg(S, mtInformation, [mbOk], 0);
end;

  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 01:43
Ik gebruikt toch ook de round() functie :)

Verwijderd

waarom doe je niet gewoon (delphi 6):
SetRoundMode(rmUp);

dan ben je in 1 klap klaar.

  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 01:43
Omdat ik Delphi 4 gebruik :D

  • Creepy
  • Registratie: Juni 2001
  • Nu online

Creepy

Tactical Espionage Splatterer

Op zondag 26 mei 2002 14:53 schreef Timpie het volgende:
heeft delphi niet iets van een ceil functie?
Ja dus:
Uit de Delphi help
function Ceil(X: Extended):Integer;

Description

Call Ceil to obtain the lowest integer greater than or equal to X. The absolute value of X must be less than MaxInt. For example:

Ceil(-2.8) = -2

Ceil(2.8) = 3

Ceil(-1.0) = -1
Of ie in Delphi4 zit weet ik niet, maar ik gok van wel.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Op maandag 27 mei 2002 12:33 schreef FallenAngel666 het volgende:
Omdat ik Delphi 4 gebruik :D
Goede reden, maar dat wist ik natuurlijk niet.
Pagina: 1