Entwickler-Ecke
Sonstiges (Delphi) - Ist x Vielfaches einer reellen Zahl y?
MaPsTaR - Di 29.06.10 11:28
Titel: Ist x Vielfaches einer reellen Zahl y?
Hallo,
ich schreibe zurzeit an einem Kassenprogramm (oder wie auch immer man das bezeichnen kann).
Dafür gibt es die Möglichkeit Einheiten anzulegen, wobei ein Mindestwert einzugeben ist.
Das funktioniert auch alles super...
Jetzt habe ich aber das Problem, dass ich beim Eintragen eines Artikels auf die Rechnung überprüfen will, ob die eingegebene Anzahl ein Vielfaches des Mindestwertes der jeweiligen Einheit ist.
Habe es so probiert, das arbeitet aber aufgrund der "Rundungsfehler" bei reellen Zahlen nicht immer zuverlässig.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| Unity := RoundTo(AppMgr.Prices.GetArtUnityData(AppMgr.Prices.GetArtUnity(ArtID)).Minimum, -2); ArtAdded := RoundTo(StrToFloatDef(LCount.Text, 1) / Unity, -2); if RoundTo(ArtAdded * Unity, -2) <> StrToFloatDef(LCount.Text, 1) then begin ArtID := 0; ArtAdded := -1; end; |
Obwohl ich die Werte auf zwei Nachkommastellen runde, arbeitet Delphi mit x Stellen(z.B. 0,01 = 0,0099999997765). Und dadurch entsteht dann natürlich der Fehler.
Habe ich vielleicht etwas übersehen oder kennt jemand eine andere Möglichkeit, um zu überprüfen ob eine Zahl ein Vielfaches einer reellen Zahl ist?
Gruß MaPsTaR
bummi - Di 29.06.10 11:36
vielleicht so ?
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| Function IsMultipart(v1,v2:Double;Var part:integer):Boolean; begin Result := Round(v1*100) mod Round(v2*100)=0; if Result then part := Round(v1*100) DIV Round(v2*100) else Part := 0;
end; |
Moderiert von
Christian S.: Delphi-Tags repariert
MaPsTaR - Di 29.06.10 11:44
:autsch: :autsch: :autsch:
Dankeschön, Problem ist damit gelöst.
Martok - Di 29.06.10 12:30
Wenn, dann Faktor 10000: Im Finanzwesen wird üblicherweise mit 4 Nachkommastellen gerechnet.
MaPsTaR - Di 29.06.10 14:24
Ist denn das bei der Anzahl der Artikel auch relevant?
Aber trotzdem danke für den Hinweis!!
Hidden - Di 29.06.10 19:00
Hi :)
Besonders bei vielen Artikeln aber dann bis zum Schluss mit maximaler Genauigkeit rechnen, nicht wie oben bei jedem Schritt runden. ;)
Je nach Anwendungszweck, würde ich die Anzahl der Nachkommastellen, auf die Beträge gleich sein müssen, anpassen. Will der Kunde wissen, ob er genau passend mit 5-Cent-Münzen zahlen kann, wären wohl 2 Nachkommastellen angebracht. Kauft dagegen jemand ein 1000000€-Auto, kannst du den Faktor wahrscheinlich ruhig mal auf 10^-4, statt 1000 oder 100, stellen. :)
lg,
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!