Hallo Reinhard,
vielleicht etwas verwirrend: Access und Excel benutzen nicht
die max. mögliche Genauigkeit eines Double (für die Anzeige ,
um eben Rundungsfehler, bzw. Overflow bei der int. Berechnung
zu vermeiden.
was ist denn die max. mögliche Genauigkeit eines Double?
Den Wertebereich kenne ich, was aber meinst du mit
Genauigkeit,
das müssen doch wohl die signifikanten Stellen sein die
verwertbar sind.
Ja, wenn man was berechnet was den Rahmen von ca. 1*10^308
sprengt
gibt es Überlauf.
In der Excel-Hilfe steht aber eindeutig, das egal welche Zahl
man
eingibt, immer nur 15 signifikante Stellen angezeigt/intern
benutzt werden.
Die signifikante Stellenanzahl wird hier von Access/Excel
vorgegeben, in der Tat 15 Stellen.
Aha, die 17 hatte mich irritiert.
Solche genaueneren Additionen gehen dann nur noch per Vba, da
geht das indem man wie in der Schule da alles Ziffer für
Ziffer addiert.
Wie meinst Du das? Nach dieser Methode müsste die Zahl in eine
Ziffernfolge (String) umgewandelt , bzw. geführt werden, damit
man auf die einzelnen Ziffern (die ja datentechnisch keine
Zahlen darstellen, sondern eben Text/Ziffern sind)
Ja genau so. Ich hatte auf meiner Festplatte die leider im
Nirwana ist einen Link zu einer Seite wo sich jmd. die Mühe
gemacht hat/hatte
Vba-Funktionen zu erstellen die beliebig lange Zahlen die als
Text vorliegen miteinander zu verechnen. Das Ergebnis ist dann
auch ein String.
Und er hatte da nicht nur die vier Grundrechnungsarten sondern
vieles mehr, Wurzel, Potenz, usw.
In VBA ist aber der Double-Datentyp die logrithmische
Darstellung einer Zahl und kein Text.
Der Datentyp Double bedeutet daß die Variable einen bestimmten
(Zahlen-) Wertebereich umfassen darf.
Das ist bei jedem Datentyp so…
Bei Double bedeutet das auch eine gewisse „Genauigkeit“ und die Möglichkeit für Dezimalstellen, im Gegensatz zu einem Integer-Wert.
Die Darstellung ist was völlig anderes.
Wir sind uns ja einig daß in Access und Excel Zahleneingaben
in Zellen vom Typ Double sind.
Nein, nicht ganz so, wenn man diese Aussage genau nimmt.
In Access werden Eingaben anhand definierter DATENTYPEN in die passende interne Darstellung umgesetzt.
Zumindest in VBA und in Tabellen. In ungebundenen Formular-Textfeldern kommt der VARIANT-Datentyp zum Tragen, der von vorherein unbestimmt ist und erst im Verlauf der Verarbeitung des Wertes einen definierten Unterdatentyp erhält. Im Verlauf der Benutzung dieses Datentyps in VBA kann durch die interne Daten(typ)konvertierung der Wert an eine explizit deklarierte Variable zugewiesen werden. (Oder, wenn man das explizit so will, durch die Verwendung der passenden Konvertierungsfunktion)
Ist ein Formularfeld gebunden, orientiert sich der Variant-Unterdatentyp des Feldes an demjenigen Datentyp, den das entspr. Tabellenfeld aufweist.
Wie Excel das nun intern handhabt (siehe die „seltsame“ und „Formatierung“ genannte Datentyp-Deklaration), weiß ich jetzt nicht. (Wahrscheinlich rechnet Execl intern immer mit VARIANT) Eine Formatierung ist in Excel NICHT das Gleiche wie die Deklaration einer Variablen mit einem bestimmten Datentyp. Eine Formatierung (Format eines Wertes) ist in Access lediglich die gewünschte visuelle Darstellung des Wertes am Bildschirm (bzw. beim Drucken). Offensichtliches Beispiel ist das „Datum“. Ein Datum wird intern als Double-Zahl geführt, wobei der Wert selber als Darstellung nun nicht so sehr interessant ist, eher die Form 20.05.2012 oder Sonntag, 20. Mai 2012 oder was auch immer…
Es gibt in Access auch noch ein paar weitere spezielle Datentypen, die die Einschränkungen von Double (64 bit-Floating Point) etwas aushebeln:
Currency (Währung, 64-bit Fixed Point, Genauigkeit: 15 Stellen links und 4 Stellen rechts vom Komma ) und Decimal (allerdings bisher unvollständig implementiert, soll heißen, Decimal ist nur über eine Konvertierung einer Variant- Variablen mittels CDec() generierbar. )
Aus VBA-Hilfe:
_Decimal-Datentyp
Variablen des Datentyps Decimal werden als 96-Bit-Ganzzahlen (12 Bytes) mit Vorzeichen mit einer variablen Potenz zur Basis 10 gespeichert. Die Potenz zur Basis 10 wird als Skalierungsfaktor verwendet und bestimmt die Anzahl der Nachkommastellen, die in einem Bereich von 0 bis 28 liegen kann. Beim Skalierungsfaktor von 0 (keine Nachkommastellen) liegt der größtmögliche Wert bei +/-79.228.162.514.264.337.593.543.950.335. Bei 28 Nachkommastellen liegt der größte Wert bei +/-7,9228162514264337593543950335 und der kleinste Wert, der ungleich Null ist, bei +/-0,0000000000000000000000000001.
Anmerkung Der Datentyp Decimal kann nur mit einem Wert vom Typ Variant benutzt werden, d.h., Sie können keine Variable als Decimal deklarieren. Mit der CDec-Funktion können Sie jedoch einen Wert vom Typ Variant erstellen, dessen Untertyp Decimal ist._
Insofern ist Access (und VBA) sehr „datentypen-lastig“ und man tut gut daran, von vornherein sich zu überlegen, mit welchen Werten man es zu tun hat und was man mit diesen Werten anstellen will.
Excel ist nun mal eine Kalkulationstabellen-Anwendung, und da spielen rationale Zahlen eben die Hauptsache. Nicht nur aus diesem Grund gibt es immer wieder Schwierigkeiten, wenn man Excel-Daten 1:1 nach Access importieren will.
Gruß
FRANZ, DF6GL