Autor Beitrag
itspeed
Hält's aus hier
Beiträge: 13

Win NT/2000/XP/Vista, Server 2003/2008
Delphi 2006 Architect, 2009, Clarion, Oberon
BeitragVerfasst: Mi 06.05.09 11:38 
Guten Morgen Forum

Auf die Gefahr hin, dass das schon mal Thema war (fand bei suche jedoch nichts), hier meine Herausforderung:

Ich schreibe berechnete Real-Werte welche auf 2 Stellen nach dem Komma gerundet sind in die MS-SQL (2005) Datenbank in ein real Feld.
Betrachte ich das ganze mit dem Server Management Studio, sind in der Tabelle auch die Zahlen richtig gespeichert.

Lese ich diese nun in ein TDBGrid zurück, kommen da jedoch nur angenäherte Werte mit mehr Kommastellen zurück. Was mache ich falsch?
Beispiel aus 100.84 wird 100.8356781

Datenverknüpfung
MS-SQL(2005) real Field <- TADOConnection < TADODataSet < TDataSource <- TDBGrid

Würde mir sehr helfen, wenn ich da einen Tip von Euch bekomme.

mfg itspeed
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 06.05.09 11:40 
Wenn Du immer nur 2 Nachkommastellen haben möchtest, solltest Du es einmal mit Decimal statt real versuchen.
itspeed Threadstarter
Hält's aus hier
Beiträge: 13

Win NT/2000/XP/Vista, Server 2003/2008
Delphi 2006 Architect, 2009, Clarion, Oberon
BeitragVerfasst: Mi 06.05.09 12:17 
user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
Wenn Du immer nur 2 Nachkommastellen haben möchtest, solltest Du es einmal mit Decimal statt real versuchen.


Nun DECIMAL hatten wir schon mal. Ist aber eher hinderlich in einem ERM welches sich über mehrere Tabellen und in Verbindung mit Access-DB's (externer Datentransfer in eine Access-APP welche ich leider noch nicht auf den Mond schiessen kann...). Weiter bietet DECIMAL keine gute Unterstützung, wenn wir das Projekt dereinst einmal auf .NET wandeln wollen.

Also nochmals. In der SQL-Tabelle steht explizit der richtige Real-Wert. Zurückgelesen in das Grid kommt nur so in etwa der Wert...

mfg
itspeed
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 06.05.09 12:59 
Zitat:
In der SQL-Tabelle steht explizit der richtige Real-Wert.

Mir scheint eher, der Wert wird Dir nur so dargestellt, wie Du ihn auch erwartest. Man prüft ja auch keine Gleitkommazahlen mit "=" auf Gleichheit, da man so wahrscheinlich nicht das richtige Ergebnis erhält.
itspeed Threadstarter
Hält's aus hier
Beiträge: 13

Win NT/2000/XP/Vista, Server 2003/2008
Delphi 2006 Architect, 2009, Clarion, Oberon
BeitragVerfasst: Do 14.05.09 08:23 
user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
Zitat:
In der SQL-Tabelle steht explizit der richtige Real-Wert.

...Man prüft ja auch keine Gleitkommazahlen mit "=" auf Gleichheit...


Es geht hier nicht um das Vergleichen von Gleitkommazahlen sondern um das sichern einer Serie von Werten, welche in sich wieder einen definierte Summe ergeben sollten (berechnete Trendkurven).

user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
Mir scheint eher, der Wert wird Dir nur so dargestellt...


Wenn dem so wäre würde mich der Debuger (Delphi 2006) und der SQL-Server-Manager anlügen! Denn, wenn ich Gleitkommazahlen mit 4 oder 5 Nachkommastellen in die Tabelle schreiben, werden diese vom SQL-Server-Manager dort auch so dargestellt..

Das Problem an und für sich ist noch nicht gelöst! Da die Zahlenreihen jedoch eher grössere Werte enthalten, habe ich das Problem insofern entschäft, als ich die berechneten Werte auf 0.05 genau gerundet runterschreibe... und siehe da: es gibt keine Differenzen mehr - Wunder o Wunder! Die Lösung ist nicht das, was ich erwartet hätte, aber es funktioniert.

itspeed