Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: HaNe am Mai 28, 2020, 20:40:27

Titel: Frage zur Function MOD
Beitrag von: HaNe am Mai 28, 2020, 20:40:27
Hallo,
kann man mit der Function MOD auch Zahlen mit Komma vergleichen? Ich habe folgendes Problem: beide Operatoren ( z.B. Kommen und Gehen) sind als Single deklariert. Bei einem Vergleich wird mir  das falsche Ergebnis angezeigt.
z.B. Kommen = 67,5 und Gehen = 7,5

Kommen MOD Gehen = Ergebnis 4, müsste aber eigentlich 0 ergeben.

Was mache ich falsch?

Vielen Dank für alle Hilfe

Gruß
Hagen
Titel: Re: Frage zur Function MOD
Beitrag von: markusxy am Mai 28, 2020, 20:50:22
Wenn du in die Hilfe schaust dann steht doch genau dort was passiert.

Die Werte werden auf Ganzzahlen gerundet.

Wichtig ist nur zu wissen, dass VBA nicht kaufmännisch rundet, sondern das "genauere" Bankers rounding verwendet.

aus 67,5 wird 68
aus 68,5 wird ebenso 68
Titel: Re: Frage zur Function MOD
Beitrag von: Maxel am Mai 28, 2020, 21:06:54
ZitatWichtig ist nur zu wissen, dass VBA nicht kaufmännisch rundet, sondern das "genauere" Bankers rounding verwendet.

aus 67,5 wird 68
aus 68,5 wird ebenso 68

Hm, Markus,
warum wird bei 67,5 auf- und bei 68,5 abgerundet?
Titel: Re: Frage zur Function MOD
Beitrag von: markusxy am Mai 28, 2020, 21:16:44
Zitat von: Maxel am Mai 28, 2020, 21:06:54

Hm, Markus,
warum wird bei 67,5 auf- und bei 68,5 abgerundet?

Weil es so programmiert wurde.  ;D
Das ist so eigentlich der Standard, ist das etwa neu für dich?
Titel: Re: Frage zur Function MOD
Beitrag von: Maxel am Mai 28, 2020, 22:10:36
Ich versteh's nicht, weder mathematisch noch logisch noch programmtechnisch gewollt.

Um auf meinen vorherigen Post zurückzukommen: Was ist der Unterschied zwischen 67 und 68, den ein Programmierer berücksichtigen muss?
Titel: Re: Frage zur Function MOD
Beitrag von: HaNe am Mai 29, 2020, 06:42:41
Hallo,
zuerst vielen Dank für die Meldungen.

Zitat von: markus888 am Mai 28, 2020, 20:50:22
Wenn du in die Hilfe schaust dann steht doch genau dort was passiert.

Die Werte werden auf Ganzzahlen gerundet.

Wichtig ist nur zu wissen, dass VBA nicht kaufmännisch rundet, sondern das "genauere" Bankers rounding verwendet.

aus 67,5 wird 68
aus 68,5 wird ebenso 68

Wenn ich das richtig verstehe wird nicht nur das Ergebnis, sondern es werden auch die beiden Operatoren gerundet und denn erst erfolgt die Rechnung? Es muss doch aber möglich sein mit den angegebenen Werten ( 67,5 und 7,5 ) zu arbeiten.
Hintergrund ist eine Arbeitszeitberechnung. Der Arbeitnehmer ist für 7,5h angestellt. Da es möglich sein soll auch  fehlende Arbeitszeit/Tag mit Urlaub auszugleichen, rechne ich nicht mit Urlaub als Tagen, sondern mit Stunden ( z.B. wenn er 20 Tage Urlaub hat sind das 150h ). Somit kann ich leicht dem Resturlaub berechnen, wenn er im betreffenden Fall  5h arbeitet und den Rest ( 2,5h) als Urlaub verbucht haben will. Dies könnte er dann 3x machen und es würde automatisch einen ganzen Tag Urlaub verrechnen. Alles bissl kompliziert, aber doch irgendwie logisch.
Also, was würdest du in diesem Fall vorschlagen? Ich hab das jetzt mal so probiert: für diesen Fall habe ich beide Operatoren mit 2 multipliziert. Hier komme ich (für die Arbeitszeit) auf eine ganze Zahl und das Ergebnis funktioniert. Es ergibt sich also der Rest von 0.
Oder gibt es noch andere Möglichkeiten.

Gruß
Hagen
Titel: Re: Frage zur Function MOD
Beitrag von: PhilS am Mai 29, 2020, 07:51:21
Zitat von: Maxel am Mai 28, 2020, 22:10:36
Was ist der Unterschied zwischen 67 und 68, den ein Programmierer berücksichtigen muss?
68 ist eine gerade Zahl, 67 nicht.
Ja, das ist offensichtlich und scheinbar irrelevant. Dennoch ist das die Grundlage für die in Access (und VBA) eingebaute Rundungsfunktion.
Siehe Access FAQ 2.1 Runden (http://www.donkarl.com?FAQ2.1).
Titel: Re: Frage zur Function MOD
Beitrag von: markusxy am Mai 29, 2020, 08:53:06
@Maxel,
lies einfach nach unter Bankers Rounding.
Das ist das Standard Rundungsverfahren eines Prozessors, da ein kaufmännisches Runden streng genommen nicht in der Mitte ist.
Daher wurde viel Aufwand betrieben es "besser" zu machen.
Titel: Re: Frage zur Function MOD
Beitrag von: markusxy am Mai 29, 2020, 09:06:20
@HaNe,
ich bin mir jetzt nicht sicher ob du die Funktion Mod verstehst.
Da werden zwei Ganzzahlen dividiert und der Rest davon ist das Ergebnis.
Das Ergebnis kann als nur eine Ganzzahl sein.
Wenn der Prozessor eine Integer Division macht, liefert er immer beide Ergebnisse.

Beim Arbeiten mit Zeiträumen rechne ich immer in der kleinsten notwendigen Einheit.
In diesem Fall würde ich in Minuten auflösen und als Long speichern.
Generell vermeide ich wann immer möglich Gleitkommazahlen.
Beträge kann man z.B. in Cent speichern, statt in Euro.
Titel: Re: Frage zur Function MOD
Beitrag von: Beaker s.a. am Mai 29, 2020, 16:12:53
Hallo,
Meine Meinung, Anfangs- und Endzeiten stehen ja nicht alleine da. Die
sind immer mit einem Datum verbunden, - also Double.
gruss ekkehard
Titel: Re: Frage zur Function MOD
Beitrag von: HaNe am Mai 30, 2020, 10:47:40
@Markus888

Zitat von: markus888 am Mai 29, 2020, 09:06:20

ich bin mir jetzt nicht sicher ob du die Funktion Mod verstehst.
Da werden zwei Ganzzahlen dividiert und der Rest davon ist das Ergebnis.
Das Ergebnis kann als nur eine Ganzzahl sein.
Wenn der Prozessor eine Integer Division macht, liefert er immer beide Ergebnisse.

Ich hab schon die Funktion Mod verstanden. Hatte eben nur angenommen daß das Ergebnis eine Ganzzahl ist und nicht auch die Operatoren. Genau da lag mein Fehler. Vielen Dank für den Hinweis ;)

Zitat
Beim Arbeiten mit Zeiträumen rechne ich immer in der kleinsten notwendigen Einheit.
In diesem Fall würde ich in Minuten auflösen und als Long speichern.
Generell vermeide ich wann immer möglich Gleitkommazahlen.
Beträge kann man z.B. in Cent speichern, statt in Euro.
Das ist genau der Tipp den ich gebraucht habe. Ich löse das alles in Minuten auf ( also *60) und schon funktioniert das auch.
Manchmal sieht man eben den Wald nicht, weil Bäume davor stehen  ;D ;D ;D

Also vielen Dank nochmal für alle Hilfe. Es funtioniert nun so, wie ich das brauche.
Schönes WE

Gruß
Hagen