vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Variablen/Strings · Algorithmen/Mathematik   |   VB-Versionen: VB5, VB606.06.01
Kaufmännisch runden und Euro-Umrechnung

Eine Umrechnungs-Funktion, die u.a. das korrekte kaufmännische Runden demonstriert.

Autor:   Dieter OtterBewertung:  Views:  22.735 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

In vielen Fällen wird mit Beträgen gerechnet, bei denen die Rechenergebnisse kaufmännisch korrekt gerundet sein müssen. Gerade - oder auch - bei der Euro-Umrechnung ist dies sehr wichtig.

Das Prinzip des kaufmännischen Runden ist folgendermaßen:
Man addiert zum Ergebnis einer Rechenoperation einfach noch den fixen Wert 0.5, so daß die letzte Stelle (Einerstelle / Pfennige) ggf. aufgerundet wird.

Tipp:
Wandeln Sie für solche Rechenoperationen die Beträge und Faktoren in den Typ Long um. Multiplizieren Sie ggf. mit 10^x, wobei x für die Anzahl der Nachkommastellen steht. Sie arbeiten intern dann immer mit Ganzzahlen, was die Sache wesentlich einfacher macht. Außerdem belegt eine Variable vom Typ Long nur 4 Bytes Speicher, eine Variable vom Typ Currency hingegen 8 Bytes - also immer das Doppelte!

Hier eine Routine, die das Umwandeln in Long automatisch vornimmt. Die Anzahl der Nachkommastellen kann als zusätzlicher Parameter angegeben werden.

' Betrag in Typ Long konvertieren unter
' Berücksichtigung der Anzahl der Nachkommastellen
Public Function SaveAsLong(ByVal Betrag As String, _
  Optional ByVal Nachkomma As Integer = 2) As Long
 
  Betrag = Trim$(Betrag)
  If Betrag <> "" Then
    If InStr(Betrag, ",") > 0 Then _
      Mid$(Betrag, InStr(Betrag, ","), 1) = "."
    Betrag = Format$(Int(Val(Betrag) * Val("1" + _
      String$(Nachkomma, "0")) + 0.5))
  End If
 
  SaveAsLong = Val(Betrag)
End Function

Sie können der Funktion SaveAsLong auch die .Text-Eigenschaft einer Textbox übergeben. In jedem Fall liefert die Funktion die passende Long-Variante des Betrags zurück - egal, ob "Betrag" Nachkommastellen enthält oder nicht.

Beispiele

Debug.Print SaveAsLong("100")  ' = 10000
Debug.Print SaveAsLong("100,5")  ' = 10050
Debug.Print SaveAsLong("100,59")  ' = 10059
Debug.Print SaveAsLong("100,596") ' = 10060

Wenn Sie sich jetzt aufmerksam die Beispiele angeschaut haben, haben Sie festgestellt, daß im letzten Beispiel das kaufmännische Runden bereits berücksichtigt wurde. Bevor nämlich der Ganzzahl des Betrags gebildet wird (Int-Funktion) wird dem Betrag der fixe Wert 0.5 hinzuaddiert, so daß aus dem Betrag 100,596 der Betrag 100,601 wird. Da aber nur 2 Nachkommastellen berücksichtigt werden sollen, wird als Ergebnis korrekterweise 100,60 (oder im Long-Format: 10060) zurückgeliefert.

Euro-Umrechnung
So, und hier ein Beispiel für das Umrechnen eines Betrags in die Euro-Währung. Die Funktion wurde so erstellt, daß auch wieder von der Euro-Währung zurückgerechnet werden kann.

' Betrag nach Euro umrechnen oder umgekehrt
Public Function CEuro(ByVal vBetrag As Variant, _
  Optional ByVal ToEuro As Boolean = True, _
  Optional ByVal EuroFaktor As String = "1,95583") _
  As Variant
 
  Dim Faktor As Double
  Dim Euro As Long
  Dim Betrag As Long
 
  Euro = 0
  If Not IsNull(vBetrag) Then
    ' in Long umwandeln (2 Nachkommastellen)
    If VarType(vBetrag) = vbString Then
      Betrag = SaveAsLong(vBetrag, 2)
    Else
      Betrag = CLng(vBetrag)
    End If
 
    Faktor = SaveAsLong(EuroFaktor, 5) / 100000
    If Betrag <> 0 And Faktor <> 0 Then
      If ToEuro Then
        Euro = Int(Betrag / Faktor + 0.5)
      Else
        Euro = Int(Betrag * Faktor + 0.5)
      End If
    End If
  End If
 
  If VarType(vBetrag) = vbString Then
    ' War vBetrag vom Typ String,
    ' Ergebnis wieder als String zurückgeben
    cEuro = Format$(Euro / 100, "0.00")
  Else
    ' andernfalls Long-Wert zurückgeben
    cEuro = SaveAsLong(Format$(Euro / 100, "0.00"))
  End If
End Function

Erläuterungen:
Die Euro-Umrechnungs Funktion ist ziemlich universell gehalten. So lässt sich der umzurechnende Betrag entweder im Long-Format (siehe SaveAsLong-Funktion) oder als String übergeben. Je nach Datentyp wird dann entsprechend der umgerechnete Euro-Betrag entweder als Long oder als String wieder zurückgegeben. Die Funktion lässt sich weiterhin dazu verwenden, auch wieder von der Euro-Währung zurück in die usprüngliche Währung umzurechnen. Optional lässt sich als dritter Parameter noch der Euro-Faktor im Format xx,xxxxx angeben (max. 5 Nachkommastellen).

Beispiele zur Umrechnung:

Debug.Print cEuro("100,00")  ' = 51,13 (EUR)
Debug.Print cEuro("51,13", False)  ' = 100,00 (DM)
Debug.Print cEuro(15000)  ' = 7669 (EUR)



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.