Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi div und seine Rundung (https://www.delphipraxis.net/122255-div-und-seine-rundung.html)

haentschman 12. Okt 2008 09:52


div und seine Rundung
 
Guten Morgen....

ich hatte heute wieder mal :wiejetzt:

die Funktion div ergibt ja als Ergebnis eine Ganzzahl.

Dann bitte ich um eine Erklärung:

6.50 div 8 = 0
7.00 div 8 = 0
7.50 div 8 = 1 :gruebel: sollte eigentlich auch 0 sein oder ?
8.00 div 8 = 1

Kann mir das jemand erklären ?

Danke.

turboPASCAL 12. Okt 2008 09:55

Re: div und seine Rundung
 
Div arbeitet nur mit Ganzzahlen.
8 div 8 etc..

Wenn du realzahlen hast verwende Delphi-Referenz durchsuchenRound und Delphi-Referenz durchsuchenTrunc.

SirThornberry 12. Okt 2008 09:57

Re: div und seine Rundung
 
mich wundert es das 7.5 div 8 bei dir compiliert :gruebel:

DeddyH 12. Okt 2008 09:58

Re: div und seine Rundung
 
Mich auch, das sollte der Compiler gar nicht erst akzeptieren. Machst Du irgendwelche casts vorher?

haentschman 12. Okt 2008 10:00

Re: div und seine Rundung
 
Danke für die rasche Antwort.

:gruebel: habe ich da was mißverstanden...

ich will ja aus einem Float eine Ganzzahl haben.

im einfachsten Sinne nach obigem Beispiel möchte ich als Ergebnis:
- wie oft paßt (in obigem Beispiel die 8) in den Floatwert. :wink: ein wenig simpel ausgedrückt

funktioniert soweit auch gut bis auf die 7,50... da bekomme ich als Ergebnis eine 1 zurück...hätte da aber auch gern eine 0 :wink:

[edit]
Delphi-Quellcode:
ComboBoxTage.ItemIndex:= ZQueryAnlagenDetail.FieldValues['ZEITAUFWAND'] div 8;
... das Feld ist ein Float Feld und die Werte darin von 0 bis ... in 0.5 Schritten
[/edit]

alzaimar 12. Okt 2008 10:06

Re: div und seine Rundung
 
(variant) 7,5 wird beim impliziten Typecast (Variant => Integer) zu 8 aufgerundet, denke ich mal.

bernau 12. Okt 2008 10:06

Re: div und seine Rundung
 
Zitat:

Zitat von haentschman
7.00 div 8 = 0
7.50 div 8 = 1 :gruebel: sollte eigentlich auch 0 sein oder ?
8.00 div 8 = 1

Die 7.5 wird vieleicht vor der Rechenoperation gerundet, da div mit integer arbeitet. Gerundet ergibt 7.5 eben eine 8. Und 8 geteilt durch 8 ist 1.


Gerd


Edit: alzaimer war wohl um 7.5 Sekunden ,ähm 8 Sekunden schneller.

Klaus01 12. Okt 2008 10:08

Re: div und seine Rundung
 
Vielleicht solltest Du mit trunc den Nachkommaanteil abschneiden.

Grüße
Klaus

DeddyH 12. Okt 2008 10:09

Re: div und seine Rundung
 
Also muss man selbst runden. Je nach gewolltem Ergebnis bieten sich da Round(), Trunc(), RoundTo(), SimpleRoundTo() usw. an, ich habe gerade nicht alle Möglichkeiten im Kopf.

haentschman 12. Okt 2008 10:09

Re: div und seine Rundung
 
...nun ja.

dann sollte eigentlich nach Adam Riese die 7,0 auch auf 8 gerundet werden oder ?

Zitat:

Vielleicht solltest Du mit trunc den Nachkommaanteil abschneiden.
...erscheint mir auch als die beste Lösung.
...bin schon dran :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:29 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz