Delphi-PRAXiS

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:

mkinzler 12. Okt 2008 10:11

Re: div und seine Rundung
 
Zitat:

Zitat von haentschman
...nun ja.

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

Nein, weil 7 < 7.5 ist

bernau 12. Okt 2008 10:11

Re: div und seine Rundung
 
Zitat:

Zitat von haentschman
...nun ja.

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


Nö.

7.0 = 7
7.3 = 7
7.4 = 7
7.5 = 8
7.8 = 8
7.9 = 8


So funktioniert Rundung.

haentschman 12. Okt 2008 10:14

Re: div und seine Rundung
 
:oops: ist ja schon etwas länger her...

Danke an alle...

haentschman 12. Okt 2008 10:17

Re: div und seine Rundung
 
so....

Trunc war die einfachste Lösung für meine "Sorgen"

Danke nochmal für die Mathematikstunde 8)

sirius 12. Okt 2008 10:18

Re: div und seine Rundung
 
Fieldvalues ist ein Variant.
Und wenn du mit einem Variant ein div machst, werden Fließkommazahlen vorher gerundet (round).

Edit: Wow, das war ja mehr als bloß ein roter Kasten. Auf jeden Fall habe ich es grad im Code überprüft. Und die Vermutungen, die oben genannt wurden stimmen. :D

haentschman 12. Okt 2008 10:21

Re: div und seine Rundung
 
Zitat:

Und wenn du mit einem Variant ein div machst, werden Fließkommazahlen vorher gerundet (round).
...soweit war das klar, nur wenn man nicht mehr weis wie richtig gerundet wird sollte man eine Pause machen oder Nachhilfe beantragen :oops:

...ich entscheide mich für Pause und Kaffee :thumb:

jaenicke 12. Okt 2008 10:28

Re: div und seine Rundung
 
Es gibt übrigens auch noch Floor und Ceil, damit wird egal mit welchem Nachkommawert ab- bzw. aufgerundet ;-).

DeddyH 12. Okt 2008 10:29

Re: div und seine Rundung
 
Naja, unsere Schulzeit ist ja auch schon ein paar Sonntage her, gell? :zwinker:

[edit] IMHO wären Floor() oder Ceil() hier weniger geeignet. [/edit]

haentschman 12. Okt 2008 10:35

Re: div und seine Rundung
 
[OT]
Zitat:

Naja, unsere Schulzeit ist ja auch schon ein paar Sonntage her, gell?
...das war noch zu Friedenszeiten in der DDR :thumb:
...habe ich mich jetzt geoutet :gruebel: und das ist gut so...

PS: für die Jüngeren... DDR ist kein Speichermodul :mrgreen:
[/OT]

jaenicke 12. Okt 2008 10:38

Re: div und seine Rundung
 
Floor macht praktisch das selbe wie Trunc wenn es sich um positive Zahlen handelt, der Unterschied liegt ja nur bei negativen Zahlen und da stimme ich zu, dass Trunc hier besser passt, denn Trunc bei -7,9 ergibt -7, Floor aber -8.

// EDIT:
Zitat:

Zitat von haentschman
[OT]PS: für die Jüngeren... DDR ist kein Speichermodul :mrgreen:
[/OT]

Die Abkürzung kenne ich: Danke Das Reicht :mrgreen:

haentschman 12. Okt 2008 10:41

Re: div und seine Rundung
 
...eine schönen Sonntag Euch allen :hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:01 Uhr.

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