AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Round gibt unterschiedliche Nachkommastellen zurück
Thema durchsuchen
Ansicht
Themen-Optionen

Round gibt unterschiedliche Nachkommastellen zurück

Ein Thema von messie · begonnen am 20. Nov 2012 · letzter Beitrag vom 22. Nov 2012
Antwort Antwort
Seite 2 von 3     12 3      
Medium

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

AW: Round gibt unterschiedliche Nachkommastellen zurück

  Alt 20. Nov 2012, 12:48
Wieder ein mal die Ungenauigkeit von Floats. Die DP ist voll davon

Ob du in der Query rundest oder nicht ist quasi egal: Zur Übergabe in dein Programm muss der Wert ja doch wieder in einen Float gepackt werden, wodurch die prinzipbedingte Ungenauigkeit wieder zuschlägt. Die einzig sinnvolle Stelle für die Rundung ist genau der Zeitpunkt der Darstellung, d.h. entweder DisplayFormat bei DataSets oder mittels FloatToStrF() oder Format() wenn du den String selber bauen möchtest.
"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
DanielJ

Registriert seit: 8. Sep 2008
Ort: Hamburg
35 Beiträge
 
Delphi XE Professional
 
#12

AW: Round gibt unterschiedliche Nachkommastellen zurück

  Alt 21. Nov 2012, 09:58
Hallo,

0.3 ist eben in eime Float nich speicherbar.
Alternativ währe hier eventuell ein Festkommaformat angebracht - In Firebird z.B Numeric(18,4) und in Delphi z.B. Currency.

LG,
Daniel
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#13

AW: Round gibt unterschiedliche Nachkommastellen zurück

  Alt 21. Nov 2012, 13:21
Moin,

Numeric ist eine gute Idee. Das erklärt mir zwar noch nicht, warum das Round doch das Rundungsgeraffel liefert aber für den Alltagsgebrauch ist das ok

Danke, Messie
  Mit Zitat antworten Zitat
DanielJ

Registriert seit: 8. Sep 2008
Ort: Hamburg
35 Beiträge
 
Delphi XE Professional
 
#14

AW: Round gibt unterschiedliche Nachkommastellen zurück

  Alt 21. Nov 2012, 15:08
as erklärt mir zwar noch nicht, warum das Round doch das Rundungsgeraffel liefert aber für den Alltagsgebrauch ist das ok
Das Round liefert dir exakte 0.3, aber das Speichern in einem Float macht es wieder zu nichte. Wie gesagt, ein Float kann nicht jeden Wert exakt repräsentieren - das ist auch der Grund warum Delphi dir CompareValue und SameValue anbietet.
Willst du exakte Dezimalwerte, brauchst du ein Festkommaformat.

Wissenschafliche Abhandlung zu dem Thema Klick

Dies sollte man zumindest in Grundzügen verstehen, sonst verzapft man schnell einige Bugs!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Round gibt unterschiedliche Nachkommastellen zurück

  Alt 21. Nov 2012, 15:29
Bezüglich des Currency in Delphi ist die Erklärung auch ganz einfach.

Currency ist in Wirklichkeit ein Int64, bei welchem die understen 4 Dezinalstellen als Nachkommastellen angesehn werden ( i / 1000 ),
womit es innerhalb aller Dezimalstellen keine Rundungsfehler geben kann.

Darum nennt sich das auch Currency aka "Währung", weil gerade dort besser nicht falsch gerechnet werden sollte.
$2B or not $2B
  Mit Zitat antworten Zitat
DanielJ

Registriert seit: 8. Sep 2008
Ort: Hamburg
35 Beiträge
 
Delphi XE Professional
 
#16

AW: Round gibt unterschiedliche Nachkommastellen zurück

  Alt 21. Nov 2012, 16:33
Darum nennt sich das auch Currency aka "Währung", weil gerade dort besser nicht falsch gerechnet werden sollte.
Das ist auch nur Begrenzt richtig: Currency ist halt, wenn man mit dem Ergebnis noch weiterrechnen will, unglaublich ungenau. Das kann, gerade wenn´s um´s Geld geht, auch Fatal sein!
Man sollte sich also gut überlegen wo man welche Genauigkeit braucht.
Es hat einen Grund warum es beide Datentypen gibt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Round gibt unterschiedliche Nachkommastellen zurück

  Alt 21. Nov 2012, 16:49
Wieso ungenau?

Es ist auf die definierten 4 Nachkommastellen zu 100% ganz genau.
$2B or not $2B
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#18

AW: Round gibt unterschiedliche Nachkommastellen zurück

  Alt 21. Nov 2012, 17:32
Das Round liefert dir exakte 0.3, aber das Speichern in einem Float macht es wieder zu nichte
Ich glaube, da ist der Weg zur nächsten Frage: wo stehen meine Daten aus dem View genau? Werden die irgendwo zwischengespeichert oder hortet meine Query nur einen Pointer auf das Ergebnis?
Und es sieht ja dann so aus, als würde das TCRDBgrid tatsächlich eine Kopie im Speicher einrichten, denn das hat ja die Nachkommastellen. Ich weiß nicht, was in Flamerobin verwendet wird, aber da habe ich den Effekt ja nicht.
Da ich ja recht neu im DB-Thema bin: wie wird das denn im Allgemeinen von den Komponenten gehandhabt? Werden die Queryergebnisse jeweils kopiert oder sind das Pointer/Verweise?

Danke, Messie
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#19

AW: Round gibt unterschiedliche Nachkommastellen zurück

  Alt 21. Nov 2012, 17:40
Wieso ungenau?

Es ist auf die definierten 4 Nachkommastellen zu 100% ganz genau.
ich könnte mir vorstellen, dass bei der Finanzmathematik durchaus mehr stellen relevant sein könnten. Gerade für Banken mit tausenden Transaktionen könnte eine Beschränkung auf 4 NK-Stellen sehr schnell ein größerer Verlust bedeuten.
  Mit Zitat antworten Zitat
DanielJ

Registriert seit: 8. Sep 2008
Ort: Hamburg
35 Beiträge
 
Delphi XE Professional
 
#20

AW: Round gibt unterschiedliche Nachkommastellen zurück

  Alt 21. Nov 2012, 17:56
Wieso ungenau?
du gibst dir im nächsten Satz die Antwort ja schon selber:

Es ist auf die definierten 4 Nachkommastellen
die Genaugikeit bei z.b. € beträgt damit ein Hundertstel Cent.
Wenn ich Jezt Heizölhändler bin und sagen wir von meinem Großhändler Öl Kaufe für 0,63145 € / Liter.
Ich ordere also 100.000 Liter ... wieviel Kostet das dann?
63.145 € oder 63.140 €?
Wer zahlt meinem Großhändler die Fehlenden 5 €?
Du der du mir das Programm Programmiert hast?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 06:07 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