AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Genauigkeit von Datentypen

Ein Thema von PaddyVII · begonnen am 25. Feb 2015 · letzter Beitrag vom 26. Feb 2015
Antwort Antwort
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.545 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Genauigkeit von Datentypen

  Alt 26. Feb 2015, 10:09
Zitat:
if arGeld[i] = 2 then
if SameValue(arGeld[i], 2, 0.005) then oder
if CompareValue(arGeld[i], 2, 0.005) = EqualsValue then
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Genauigkeit von Datentypen

  Alt 26. Feb 2015, 10:15
Und wenn man die 0.005 weg lässt, dann wird automatisch ein typspezifischer Wert genommen.

Delphi-Quellcode:
const
  FuzzFactor = 1000;
  ExtendedResolution = 1E-19 * FuzzFactor;
  DoubleResolution = 1E-15 * FuzzFactor;
  SingleResolution = 1E-7 * FuzzFactor;

function SameValue(const A, B: Extended; Epsilon: Extended): Boolean;
begin
  if Epsilon = 0 then
    Epsilon := Max(Min(Abs(A), Abs(B)) * ExtendedResolution, ExtendedResolution);
  ...
end;

function IsZero(const A: Extended; Epsilon: Extended): Boolean;
begin
  if Epsilon = 0 then
    Epsilon := ExtendedResolution;
  ...
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
640 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

AW: Genauigkeit von Datentypen

  Alt 26. Feb 2015, 11:04
Ob es Sinn macht, statt Double Currency zu verwenden muss wohl jeder für sich selber entscheiden. Es kommt auf den Einzelfall an. Wenn z.B. ein Preis aus Menge mit bis zu 3 Nachkommastellen, Rabatt mit zwei Nachkommastellen, oder sogenannten Multi's wie sie bei Datanorm verwendet werden mit 3 Nachkommastellen....usw. berechnet werden muss, dann muss man Double und Currency mischen. Das ist auch nicht der Hit und darum kann es eleganter sein, die Doubles entsprechend zu behandeln.

if SameValue(arGeld[i], 2, 0.005) then
... in eine kleine Funktion packen, wenn man Double's für Beträge verwenden möchte

Delphi-Quellcode:
function GleicherBetrag(D1, D2: double): boolean;
begin
  Result := SameValue(D1, D2, 0.011);
end;
Gruss Otto
Wenn du mit Gott reden willst, dann bete.
Wenn du ihn treffen willst, schreib bei Tempo 220 eine SMS
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Genauigkeit von Datentypen

  Alt 26. Feb 2015, 11:09
Muss?
Currency = 4 Nachkommastellen

Bei Epsilon=0.011 ist 0.01 = 0.02 .
Epsilon muß kleiner als die Hälfte der kleinsten erlaubten Differenz sein, um "sicher" vergleichen zu können.
Wenn A=3, B=4 und Epsilon=>0.5, dann würde 3.5 verglichen mit A und B jeweils "gleich" sein.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (26. Feb 2015 um 11:17 Uhr)
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
640 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

AW: Genauigkeit von Datentypen

  Alt 26. Feb 2015, 12:13
Muss?
Currency = 4 Nachkommastellen
....oooops....sorry. Verwende Currency nie und hatte was von 2 Nachkommastellen in Erinnerung
Gruss Otto
Wenn du mit Gott reden willst, dann bete.
Wenn du ihn treffen willst, schreib bei Tempo 220 eine SMS
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Genauigkeit von Datentypen

  Alt 26. Feb 2015, 13:22
Muss?
Currency = 4 Nachkommastellen
....oooops....sorry. Verwende Currency nie und hatte was von 2 Nachkommastellen in Erinnerung
Es gibt Länder/Währungen da hat es mehr als 2 Nachkomma-Stellen und die wären ja hübsch angeschmiert. Von daher gab es bei der Definition des Datentyps eine gewisse Weitsicht und man hat dort 4 Stellen vorgesehen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Genauigkeit von Datentypen

  Alt 26. Feb 2015, 13:44
Andere brauchen mit ihrem Quarter nur eine viertel Nachkommastelle.

Und dann noch bissl zum Rechnen, Positionsweise MwSt. usw.

Knapp 9 Billiarden Euro, auf einen tausenstel Euro genau ... da hätte man ruhig noch für ein/zwei Nachkommastellen mehr Platz gehabt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (26. Feb 2015 um 13:49 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Genauigkeit von Datentypen

  Alt 26. Feb 2015, 14:28
Andere brauchen mit ihrem Quarter nur eine viertel Nachkommastelle.

Und dann noch bissl zum Rechnen, Positionsweise MwSt. usw.

Knapp 9 Billiarden Euro, auf einen tausenstel Euro genau ... da hätte man ruhig noch für ein/zwei Nachkommastellen mehr Platz gehabt.
Ich vermute mal, dass die Bedeutung des Datentyps Currency etwas verkannt/nicht erkannt wird.

Das ist ein Datentyp für eine Währungs-Buchung. Und ich kenne niemanden, der seine Buchhaltung auf Mikro-Cent führt. Während einer Berechnung eines Buchwertes da nimmt man diese Mikro-Cents mit, aber irgendwann kommt ein Buchwert heraus und der ist dann im EURO-Raum auf 2 Stellen nach dem Komma gerundet (ohne jetzt auf die speziellen Rundung-Arten eingehen zu wollen).

Bei einer Rechnung z.B. erfolgt die Festlegung des Buchwerts auf Positions-Ebene. Jede Position hat also einen festgelegten Buchwert und der ist dann vom Typ Currency .

ArtikelPreisMengeBerechneter-WertBuch-Wert
Gold1214,15($/oz.tr.)1(g)1214,15($/oz.tr.) / 31,1034768(g/oz.tr.) * 1(g) = 39,035828946299663($)39,04($)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (26. Feb 2015 um 21:50 Uhr)
  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 07:59 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