Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Seltsamer Effekt mit Double (https://www.delphipraxis.net/151356-seltsamer-effekt-mit-double.html)

Privateer3000 14. Mai 2010 13:20

Datenbank: MDB • Zugriff über: ADO

Seltsamer Effekt mit Double
 
Hallo Gemeinde,
ich habe einen seltsamen Effekt beim eintragen von Double Zahlen.
Gegeben ist ein TDBGrid,eine Navileiste und die dazugehörigen Query und DataSource.
Nun aktiviere ich per Navileiste das eingeben von Werten.
Die zugeordnete Tabelle enthält ein Textfeld, eine Double-Feld und ein Boolsches Feld.
Gebe ich nun zB 3,10 in das Feld mit dem Double ein, erscheint nach dem Speichern
aber 3,09999990463257 im DBGrid.
Wieso ändert Access eigenständig die Werte ab, obwohl eindeutig 3,10 oder 3,1
eingegeben wurde?
Öffne ich per Access die Tabelle steht wiederum 3,1 drin.
Liegt das nun an Access, dem DBGrid oder sonstwo?

Grüße

hoika 14. Mai 2010 13:23

Re: Seltsamer Effekt mit Double
 
Hallo,

das liegt daran, dass ein Double nur einen ungefähren Wert speichert,
im Gegensatz zu z.B. Integer.

Per DisplayFormat kannst du ja ein eigenes Format nehmen (z.B. %.2f)


Heiko

Privateer3000 14. Mai 2010 14:57

Re: Seltsamer Effekt mit Double
 
Danke Hoika,
das ist echt komisch. Da 3,1 doch ein sehr genauer Wert ist,
sieht 3,09999990463257 eher ungenau aus.
Kann man die DB nicht dazu bringen "von Haus" zwei Nachkommastellen
zu speichern?

himitsu 14. Mai 2010 15:16

Re: Seltsamer Effekt mit Double
 
Fließkommazahlen werden aber nicht im Dezimalsystem gespeichert, sondern im Dualsystem und da ist 3.1 kein "sehr genauer" Wert

DeddyH 14. Mai 2010 15:18

Re: Seltsamer Effekt mit Double
 
Mir fallen spontan 2 Möglichkeiten ein: statt double Decimal verwenden oder gleich einen großen Integer-Typen und den beim Auswerten/Anzeigen durch 100 teilen.

himitsu 14. Mai 2010 15:20

Re: Seltsamer Effekt mit Double
 
Zitat:

Zitat von DeddyH
oder gleich einen großen Integer-Typen und den beim Auswerten/Anzeigen durch 100 teilen.

Currency (Int64 / 10000)

Medium 14. Mai 2010 15:22

Re: Seltsamer Effekt mit Double
 
Die DP ist voll von Themen zur Ungenauigkeit von Floats, da wir das Thema fast wöchentlich haben. Die Suche sollte also reichlich Antworten dazu haben, was und warum das da um Ungenauigkeiten geht, und warum das auch überhaupt nichts mit der "genauen Eingabe" zu tun hat. Tip: Ein Double kann auch nur 2^64 Werte speichern wie ein Int64, hat aber einen erheblich größeren Werteberich. Irgendwo müssen da Lücken sein ;)

Für exakte Speicherung wären Festpunkttypen geeignet, die im Grunde nur Integer sind, bei denen intern automatisch ein Dezimalpunkt verwaltet wird.


Hm, trotz 3-facher Redbox mal abgeschickt :]

Privateer3000 14. Mai 2010 15:25

Re: Seltsamer Effekt mit Double
 
Zitat:

Zitat von DeddyH
... oder gleich einen großen Integer-Typen und den beim Auswerten/Anzeigen durch 100 teilen.

Jetzt bitte nicht lachen, bisher habe ich es genauso gemacht. Ich wollte es halt nun gleich in Fließkommas eintragen.
Ok, also gibt es kaum andere Möglichkeiten. Currency nimmt man doch nur für Währungen?!

Danke Leute, euch allen

DeddyH 14. Mai 2010 15:25

Re: Seltsamer Effekt mit Double
 
Wie gesagt, DECIMAL ginge auch.

hathor 14. Mai 2010 16:02

Re: Seltsamer Effekt mit Double
 
Die DP braucht einen schnelleren Server!!! Das ist heute wieder furchtbaaar laaangsaaam!!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:31 Uhr.
Seite 1 von 2  1 2      

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