Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

richtige Feldgröße und Format wählen.

Begonnen von dobby110, August 08, 2022, 15:01:46

⏪ vorheriges - nächstes ⏩

dobby110

Hi zusammen,

ich hätte mal eine generelle Frage bzgl. der Feldgröße beim Felddatentyp "Zahl"

Und zwar habe ich ein Umsatz-Feld.
Dieses habe ich als Zahl, Feldgröße "Double" mit dem Format "Standardzahl" formatiert.
Dezimalstellenanzeige "Automatisch"

Welchen Hintergrund hat die Dezimalstellenanzeige "Automatisch"?
Denn wenn ich mehr als 2 Nachkommastellen eingebe, werden mir diese gar nicht angezeigt.
Im Regelfall benötige ich nur 2 Nachkommastellen, es gibt aber Ausnahmen, bei denen ich bis zu 7 Nachkommastellen eintragen muss. Diese würde ich dann natürlich auch gerne sehen.

Jetzt kämpfe ich mit dem Problem, dass mit meiner aktuellen Einstellung nur 2 Nachkommastellen angezeigt werden. Ich würde aber auch ungern die Dezimalstellenanzeige auf 7 umstellen, da es dann, in den Fällen ohne oder nur mit wenigen Nachkommastellen, schnell unübersichtlich wird.

Kann mir jemand sagen wie ich ein solches Feld am besten formatiere?
Die Daten die in das Feld eingetragen werden, werden auch nochmals über eine Schnittstelle weiterverarbeitet. Es darf hier also auf keinen Fall gerundet oder irgendwas abgeschnitten werden.

Achso ... das Format "Standardzahl" habe ich auf Grund der 1000er Trennung gewählt, da es sich teilweise um recht hohe Werte handelt.




MzKlMu

#1
Hallo,
wenn Du 7 Stellen sehen willst, so musst Du 7 Stellen einstellen. Da gilt entweder alles oder oder nichts.
Die Einstellung "Auto" bei den Dezimalstellen bewirkt, dass die Einstellungen des Formats übernommen werden. Und Standardzahl hat nun mal nur 2 Kommastellen. Das Format bestimmt letztendlich die Anzeige. Bleibt das Format leer, bestimmt die Dezimalstellenanzeige die Ansicht. Aber dann hast Du keinen Tausenderpunkt  Wenn Du diesen haben willst, musst Du das Format selbst bestimmen und
#.##0,0000000einstellen. Es werden aber immer 7 Stellen angezeigt.
1.234,0000000
1.345,2345000
1.236,3456789
Gruß Klaus

PhilS

Bzgl. der Kommastellen ist der Antwort von MzKlMu wenig hinzuzufügen. Nur: Evtl. kannst du in dem jeweiligen Formular je nach Bedarf (Kennzeichen im Datensatz) die Anzahl der Nachkommstellen per VBA umstellen von 2 auf 7.
Zitat von: dobby110 am August 08, 2022, 15:01:46Und zwar habe ich ein Umsatz-Feld.
Dieses habe ich als Zahl, Feldgröße "Double" mit dem Format "Standardzahl" formatiert.
[...]
Es darf hier also auf keinen Fall gerundet oder irgendwas abgeschnitten werden.
Dein Umsatz ist ein Umsatz von Geld? Dann wäre eigentlich der Datentyp Währung die richtige Wahl. - Allerdings speichert Währung nur 4 Nachkommastellen. Stattdessen könntest du den Datentype Zahl - Decimal verwenden und 7 Nachkommastellen vorgeben.
Double ist definitiv ungeeignet, weil Fließkommazahlen per Definition nicht exakt sind.

Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

MzKlMu

#3
Hallo,
Nur noch als Hinweis:
Zitat von: undefined.... die Anzahl der Nachkommstellen per VBA umstellen von 2 auf 7.
Das macht aber nur in einem normalen Formular Sinn, in einem Endlosform gilt die Umstellung dann auch wieder für die ganze Spalte und nicht je Datensatz.

Und auch bei Dezimal gibt es das gleiche Problem wie in #1 geschildert.

@Philipp
Wieso reicht Double nicht ?
Wenn ich recht weis, ist doch Double auf 15 Stellen genau.
Gruß Klaus

PhilS

Zitat von: MzKlMu am August 08, 2022, 17:04:36Wenn ich recht weis, ist doch Double auf 15 Stellen genau.
Fließkommazahlen sind per Definition nicht genau, unabhängig von der Anzahl der Stellen.

Aus der VBA-Doku zu Double: "Double-precision numbers store an approximation of a real number."

Nachfolgend ein kleines Beispiel mit nur 3(!) Stellen, das bereits Ungenauigkeiten aufweist.
Public Sub Double_Inaccurarcy()

    Const a As Double = 43.1
    Const b As Double = 43.2
    Const c As Double = 1
    Dim ergebnis As Double
   
    ergebnis = (a - b) + c
    Debug.Print ergebnis

End Sub

Zum Vergleich dasselbe mit Currency, ohne die Ungenauigkeit:
Public Sub Currency_NoInaccurarcy()

    Const a As Currency = 43.1
    Const b As Currency = 43.2
    Const c As Currency = 1
    Dim ergebnis As Currency
   
    ergebnis = (a - b) + c
    Debug.Print ergebnis

End Sub

Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

MzKlMu

Hallo Philipp,
vielen Dank, aber eigentlich hätte ich es wissen müssen. Kann meine Frage gar nicht mehr verstehen. ;D  :-[
Gruß Klaus