Mit Prozentzahlen arbeiten

Wer Access-Datenbanken programmiert, landet früher oder später auch bei Prozentzahlen. Diese werden etwas für die Angabe des Mehrwertsteuersatzes für Artikel benötigt (eigentlich ist das der Haupteinsatzzweck). Allerdings muss man durchaus beachten, wie Prozentzahlen gespeichert werden und wie Sie die Formatierung in Formularen und Berichten wählen, damit Sie diese Zahlen korrekt darstellt und richtig damit rechnen können. Dieser Artikel zeigt, was dabei zu beachten ist.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1906_Prozentzahlen.accdb.

Ungenauigkeiten bei Fließkommazahlen

Als Erstes wollen wir schauen, welchen Datentyp wir für die Darstellung von Prozentzahlen nutzen können. Grundsätzlich gibt es Fließkommazahlen und Festkommazahlen. Die Datentypen Single und Double sind beispielsweise Fließkommazahlen.

Eine genaue Beschreibung sparen wir uns an dieser Stelle, stattdessen schauen wir uns an, wie diese etwa beim Summieren vieler gleicher Werte verhalten, die nicht ausreichend genau dargestellt werden können. Im folgenden Beispiel addieren wir 1.000 Mal den Wert 0,1 und geben dann das Ergebnis aus:

Public Sub TestDouble()
    Dim i As Integer
    Dim dblSumme As Double
    For i = 1 To 1000
        dblSumme = dblSumme + 0.1
    Next i
    Debug.Print dblSumme
End Sub

Das Ergebnis lautet nicht 100, wie man erwarten könnte, sondern 99,9999999999986.

Wenn wir die gleiche Prozedur mit dem Datentyp Currency durchführen, der Festkommazahlen mit vier Nachkommastellen speichert, erhalten wir das korrekte Ergebnis, nämlich 100:

Public Sub TestCurrency()
    Dim i As Integer
    Dim curSumme As Currency
    For i = 1 To 1000
        curSumme = curSumme + 0.1
    Next i
    Debug.Print curSumme
End Sub

Beim Rechnen mit Geldbeträgen und Prozentzahlen sollten hier keine Ungenauigkeiten auftreten, daher wählen wir nachfolgend keinen Fließkomma-Datentyp zum Speichern von Prozentzahlen.

Datentyp für Prozentzahlen

Legen wir nun eine Beispieltabelle an, die Artikel speichern soll – samt Nettopreis und Mehrwertsteuersatz und dem Bruttopreis als berechnetes Feld.

Der Entwurf der Tabelle sieht wie in Bild 1 aus. Das Feld Mehrwertsteuersatz haben wir als Feld mit ganzen Zahlen ausgelegt – mit der Idee, den Prozentsatz als ganze Zahlen einzugeben.

Erster Versuch eines Feldes für Prozentzahlen

Bild 1: Erster Versuch eines Feldes für Prozentzahlen

Zur Berechnung des Bruttopreises und gleichzeitig zur überprüfung, welche Werte sich tatsächlich im Feld Mehrwertsteuersatz befinden, geben wir für das Feld Bruttopreis die folgende Formel für die Eigenschaft Ausdruck ein:

[Nettopreis]*(1+[Mehrwertsteuersatz]/100)

In der Datenblattansicht wird allerdings noch kein Prozentzeichen angezeigt (siehe Bild 2).

Die Berechnung gelingt, aber wir sehen kein Prozentzeichen.

Bild 2: Die Berechnung gelingt, aber wir sehen kein Prozentzeichen.

Das ändern wir zunächst, indem wir wieder in die Entwurfsansicht wechseln und die Eigenschaft Format des Feldes Mehrwertsteuersatz auf Prozentzahl einstellen. Das führt zwar dazu, dass nun ein Prozentzeichen angezeigt wird – aber dafür wird der im Feld enthaltene Wert nun auch mit 100 multipliziert (siehe Bild 3).

Das Prozentzeichen ist nun da, allerdings wird der Wert mit 100 multipliziert.

Bild 3: Das Prozentzeichen ist nun da, allerdings wird der Wert mit 100 multipliziert.

Und wenn man nun den Wert 19 eingibt, um einen Mehrwertsteuersatz von 19% festzulegen, wird nach Abschluss der Eingabe der Wert 0,00% angezeigt. Werte über 50 werden als 100% angezeigt, Werte unter 50 als 0,00%. Der Wert 1900 wird wiederum als 1900% angezeigt. Wir haben hier ein Integer-Feld gewählt zur Eingabe von Prozentzahlen, wobei durch die Formatierung als Prozentzahl die Werte durch 100 dividiert und erst dann gespeichert werden. Die Eingabe von 19 etwa wird dann zu 0,19, was in einem Feld mit ganzen Zahlen durch Abschneiden der Nachkommastellen zu 0 wird.

Also benötigen wir zumindest einen Zahlentyp, der Nachkommastellen enthält. Die Fließkommazahlen sind in bestimmten Situationen ungenau, also verwenden wir den Datentyp Währung! Dies ist der einzige auswählbare Datentyp, der Festkommazahlen erlaubt.

Dadurch wird zunächst auch die Eigenschaft Format geändert, und zwar in Währung. Dies ändern wir wieder in Prozentzahl.

Wenn wir dann wieder in die Datenblattansicht wechseln, werden wieder die gleichen Werte wie zuvor im Feld Mehrwertsteuersatz angezeigt – also beispielsweise 1900%.

Geben wir allerdings nun den Wert 19 ein, dann erscheint anschließend der Wert 19%. Das ist schon mal eine Verbesserung (siehe Bild 4)!

Die Prozente können nun direkt eingegeben werden, aber die Berechnungsformel stimmt nicht mehr.

Bild 4: Die Prozente können nun direkt eingegeben werden, aber die Berechnungsformel stimmt nicht mehr.

Wenn wir dann allerdings auf das Feld Bruttopreis schauen, sehen wir, dass die Formel für direkt eingegebene Mehrwertsteuersätze offensichtlich nicht mehr stimmt: Statt beim Nettopreis 20 € und dem Mehrwertsteuersatz 19% den Bruttopreis 23,80 € auszugeben, erscheint hier 20,038 als Ergebnis.

Die Prozentzahl, die wir als 19 eingegeben haben, wird also offensichtlich intern als 0,19 gespeichert. Das können wir uns auch durch Ermittlung des Zahlenwertes per DLookup-Funktion ansehen:

 DLookup("Mehrwertsteuersatz", "tblArtikel", "ID = 2")
 0,19 

Nach dieser Bestätigung brauchen wir also nur die Formeln des berechneten Feldes Bruttopreis wie folgt anzupassen:

[Nettopreis]*(1+[Mehrwertsteuersatz])

Die Anpassung sehen Sie auch in Bild 5.

Anpassung der Formel für das berechnete Feld zur Ermittlung der Bruttopreise

Bild 5: Anpassung der Formel für das berechnete Feld zur Ermittlung der Bruttopreise

Wechseln wir nochmals in die Datenblattansicht, finden wir nach Anpassung der zuvor eingegebenen Mehrwertsteuersätze auf jeweils ein Hundertstel des vorherigen Wertes die korrekten Werte für Mehrwertsteuersatz und Bruttopreise vor (siehe Bild 6).

Korrekte Darstellung von Mehrwertsteuersatz und Ergebnis

Bild 6: Korrekte Darstellung von Mehrwertsteuersatz und Ergebnis

Downloads zu diesem Beitrag

Enthaltene Beispieldateien:

1906_Prozentzahlen.accdb

Download

Schreibe einen Kommentar