![]() |
Problem bei Vergleich von 2 Currency-Variablen
Hallo zusammen,
ich habe hier ein Programm in dem ich viel Gebrauch von Currency-Variablen mache, damit ich Zahlen einfach vergleichen kann. Die 4 Nchkommastellen reichen mir locker für die Berechnung aus. Das Problem: Auf manchen Rechnern (mit Delphi) wird nicht mit 4 Nachkommastellen gerechnet, sondern mit bis zu 8 Stellen. Ich verstehe nciht wie das passieren kann und wie ich das Problem abstellen kann (gut ich weiß schon, dass ich einen entsprechenden Vergleich mit einem delta machen kann). Grüße Lemmy |
Re: Problem bei Vergleich von 2 Currency-Variablen
Hast du ein bisschen Code, der auf Rechner A funktioniert und auf Rechner B nicht?
|
Re: Problem bei Vergleich von 2 Currency-Variablen
Da Currency intern nur ein skalierter Integer ist, kann ich mir auch nicht vorstellen, daß da auch mal mehr reinpassen kann.
es sei denn, du hast Currency in Berechnungen mit anderen Float-Typen gemischt und vergleichst dann die Ergebnise der Berechnungen und nicht die Currency-Variablen persönlich. |
Re: Problem bei Vergleich von 2 Currency-Variablen
Hi,
nein, ich verwende zwar für eine Berechnung Double, aber das Ergebnis wird wieder als Currency nach "draussen" gegeben. Hier ein bisschen Code:
Delphi-Quellcode:
oDomain.nArea ist auch wieder ein Currency:
function TClassParent.nGetDomainAreaSum: Currency;
var iIndex:Integer; oDomain:TDomain; nDomainArea:Currency; begin nDomainArea:=0; for iIndex:=0 to oObjectListChildren.Count-1 do begin oDomain:=TDomain(oObjectListChildren.Items[iIndex]); nDomainArea:=nDomainArea+oDomain.nArea; end; result:=nDomainArea; end;
Delphi-Quellcode:
Der Rückgabewert ist bei mir ein schöner Currency und bei einem Kollegen kommt (als Meldung) so was raus:
property nArea:Currency read FnArea write SetnArea;
Die Fläche stimmt nicht überein: Parent: 125,34 m² Bereiche 125,3400638874! Gibt es einen Compilerschalter oder Projekteinstellung die ein solches Verhalten erklären könnte? (Hinweis: Projektdateien schon gecheckt, Es handelt sich um den selben Code (Versionsverwaltung). Delphi 2007 Prof, Windows XP GRüße Lemmy |
Re: Problem bei Vergleich von 2 Currency-Variablen
Zitat:
|
Re: Problem bei Vergleich von 2 Currency-Variablen
Willkommen zum guten alten, immer wieder aktuellen Thema: Ungenauigkeit von Floats *herunterbet*
Dazu findest du in der DP reichlich Lesestoff ;) Edit: Delphi konvertiert bei Vergleichen übrigens immer in den größeren der beiden verglichenen Typen, so dass hier zwei Floats, und keine zwei Currencies verglichen werden. ![]() Edit2: Im Grunde hast du also schon deine Genauigkeit kompromitiert, sobald du auch nur ein Mal Currency mit einem Floating Point Typen mischst, ausser du weisst ganz genau was da passiert, und fummelst manuell wieder alles zurecht. Aber an sich gilt: Entweder Fixpunkt, ODER Gleitkomma. |
Re: Problem bei Vergleich von 2 Currency-Variablen
Hi,
also nochmal: Ich verwende seit Jahren nur noch Currency. Die 4 Nachkommastellen reichen mir aus und ich habe es bei Vergleichen wesentlich einfacher. @alzaimar: und genau aus dem Grund stelle ich die Frage! Bei mir funktioniert der Code (und auch der Vergleich), bei meinem Kollegen nicht! Und nun zu dem Mischen von Floats und Currency: Currency wird als Typ für die Felder von Klassen verwendet. Bei einer größeren Berechnung (die aber nichts mit dem Vergleich hier zu tun hat) verwende ich für das Zwischenergebnis einen Double. Das Zwischenergebnis wird aber nie nach draussen gegeben. Wenn die Berechnung fertig ist, wird der Double in einen Currency gewandelt. Zu den Double-Vergleichen: Ich kenne die Funktionen zum Vergleich von Floats - nur hier habe ich einen Currency und ich verstehe nicht warum auf einmal (und zudem nicht immer) ein Float daraus wird. Zitat:
Grüße Lemmy |
Re: Problem bei Vergleich von 2 Currency-Variablen
Zitat:
Zitat:
|
Re: Problem bei Vergleich von 2 Currency-Variablen
Hallo,
Asche auf mein Haupt! Ich habe in dem Code doch noch einen Float gefunden, der das Problem verursacht hat. Meinen Kollegen habe ich inzwischen geteert und gefedert. ;-) Interessant, wie oft man einen Code anschauen kann und den eigentlichen Fehler übersieht.... Danke für Eure Aufmerksamkeit! Grüße Lemmy |
Re: Problem bei Vergleich von 2 Currency-Variablen
Man kann manchmal auch die Bäume vor lauter Wald nicht mehr sehen, normal :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:26 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