AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Problem bei Vergleich von 2 Currency-Variablen
Thema durchsuchen
Ansicht
Themen-Optionen

Problem bei Vergleich von 2 Currency-Variablen

Ein Thema von Lemmy · begonnen am 23. Jun 2008 · letzter Beitrag vom 26. Jun 2008
Antwort Antwort
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.381 Beiträge
 
Delphi 10.4 Sydney
 
#1

Problem bei Vergleich von 2 Currency-Variablen

  Alt 23. Jun 2008, 17:11
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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Problem bei Vergleich von 2 Currency-Variablen

  Alt 23. Jun 2008, 17:34
Hast du ein bisschen Code, der auf Rechner A funktioniert und auf Rechner B nicht?
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

Re: Problem bei Vergleich von 2 Currency-Variablen

  Alt 23. Jun 2008, 17:41
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.381 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Problem bei Vergleich von 2 Currency-Variablen

  Alt 23. Jun 2008, 19:39
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:
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;
oDomain.nArea ist auch wieder ein Currency:
    property nArea:Currency read FnArea write SetnArea; Der Rückgabewert ist bei mir ein schöner Currency und bei einem Kollegen kommt (als Meldung) so was raus:

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
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Problem bei Vergleich von 2 Currency-Variablen

  Alt 23. Jun 2008, 20:42
Zitat von Lemmy:
Die Fläche stimmt nicht überein: Parent: 125,34 m² Bereiche 125,3400638874!
Das fettgedruckte ist kein Currency und daher funktioniert der Vergleich auf Gleichheit nicht. Verwende die Differenz und vergleiche, ob der Absolutwert < 1/100 ist.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Problem bei Vergleich von 2 Currency-Variablen

  Alt 24. Jun 2008, 00:02
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. Hier im Forum suchenVergleich Double ist z.B. prima zum suchen.

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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.381 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Problem bei Vergleich von 2 Currency-Variablen

  Alt 24. Jun 2008, 08:33
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:
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. Suche in der Delphi-PRAXiSVergleich Double ist z.B. prima zum suchen.
Das höre ich jetzt zum ersten mal! Warum sollte Delphi bei einem Integervergleich aus den Integern irgend welche Floats machen????

Grüße
Lemmy
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Problem bei Vergleich von 2 Currency-Variablen

  Alt 24. Jun 2008, 09:07
Zitat von Lemmy:
@alzaimar: und genau aus dem Grund stelle ich die Frage! Bei mir funktioniert der Code (und auch der Vergleich), bei meinem Kollegen nicht!...
Das kann aber nicht sein. Du siehst einen Float (das Fettgedruckte), da gibt es nichts daran zu deuten. Vielleicht doch eine ältere Version? Zeig mal mehr Code, vor allen Dingen den Vergleich und die Anzeige.

Zitat von Lemmy:
Das höre ich jetzt zum ersten mal!
Beim Verknüpfen (Vergleich oder Operation) von zwei unterschiedlichen Zahlenwerten wird die Zahl mit dem kleineren Gültigkeitsbereich expandiert/umgewandelt.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.381 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Problem bei Vergleich von 2 Currency-Variablen

  Alt 26. Jun 2008, 08:28
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
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Problem bei Vergleich von 2 Currency-Variablen

  Alt 26. Jun 2008, 14:10
Man kann manchmal auch die Bäume vor lauter Wald nicht mehr sehen, normal
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:25 Uhr.
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