Forums Neueste Beiträge
 

NUMERIC durch einen exakteren Datentyp als double implementieren

29/03/2010 - 07:41 von Dietmar | Report spam
Hallo,

wir greifen über OLEDB auf die SQL-Datenbank zu, wandeln den
NUMERIC-Datentyp in einen REAL8 um und verarbeiten ihn unter C++ als double.
Dies macht insbesondere beim Berechnen immer mehr Probleme, so dass wir
gerne mit einer Art DECIMAL (wie in .NET) arbeiten.
Bevor ich mich jetzt dazu aufraffe diesen Datentyp zu implementieren wollte
ich hier mal fragen ob da jemand schon was passendes hat und mir empfehlen
könnte.

Eine erfolgreiche Woche
Dietmar
 

Lesen sie die antworten

#1 Elmar Boye
29/03/2010 - 10:24 | Warnen spam
Hallo Dietmar,

"Dietmar" schrieb ...
wir greifen über OLEDB auf die SQL-Datenbank zu, wandeln den NUMERIC-Datentyp in einen REAL8 um und verarbeiten ihn unter C++ als
double. Dies macht insbesondere beim Berechnen immer mehr Probleme, so dass wir gerne mit einer Art DECIMAL (wie in .NET)
arbeiten.
Bevor ich mich jetzt dazu aufraffe diesen Datentyp zu implementieren wollte ich hier mal fragen ob da jemand schon was passendes
hat und mir empfehlen könnte.



Traditionell ist NUMERIC/DECIMAL in Programmiersprachen (außer COBOL ;-)
nur schwach unterstützt. Selbst das .NET Decimal ist nur ein ziemlich
schwacher Abklatsch, siehe http://www.yoda.arachsys.com/csharp/decimal.html

Ohne .NET findest Du DECIMAL im COM Bereich für VB(A) über ein VARIANT:
http://msdn.microsoft.com/en-us/lib...21061.aspx
und das wird von OleDb (als COM-Schnittstelle) auch unterstützt.
Allerdings ist Variant in C++ relativ sperrig zu handhaben:
http://msdn.microsoft.com/en-us/lib...21236.aspx

An den .NET SqlDecimal, der den SQL Server Treiber für Decimal implementiert,
kommt das aber nur bedingt ran. Wenn man sich dort die Implementation
in .NET (via Reflector) anschaut, so ist sie schon ziemlich komplex.

Ein Knackpunkt ist die Rundung, die im kaufmànnischen Bereich eine
große Rolle spielt. Da wendet der SQL Server das in Deutschland übliche
das arithmetische Runden an, wohingegen sich in COM (und anfangs auch
in .NET) das amerikanische Runden findet.

Gruß Elmar

Ähnliche fragen