Und wenn ich schon mal schreibe, kann ich die Beträge auch mit 1.000 er Trennpunkt darstellen?
AutoIt
; === Formatierter Währungsstring
; Ausgabe Euro, Standard-Währungseinstellung
ConsoleWrite(_FormatCurrency(200*12345) & @CRLF) ; ==> 2.469.000,00 €
; Ausgabe Dollar, Währungssymbol führend
ConsoleWrite(_FormatCurrency(-200*12345, -1, -1, '
, -1, 1) & @CRLF) ;==> $ -2.469.000,00
; Ausgabe Dollar, Währungssymbol führend, negativer Wert in Klammern
ConsoleWrite(_FormatCurrency(-200*12345, -1, -1, '
, -1, 1, 1) & @CRLF) ;==> [$ -2.469.000,00]
; Ausgabe Euro, mit Vornull
ConsoleWrite(_FormatCurrency(4/80) & @CRLF) ;==> 0,05 €
; Ausgabe Euro, ohne Vornull
ConsoleWrite(_FormatCurrency(4/80, -1, -1, -1, 0) & @CRLF) ;==> ,05 €
;===============================================================================
; Function Name...: _FormatCurrency
; Description.....: Formatiert einen Ausdruck als Währung
; Parameter(s)....: $iExpression der zu formatierende Ausdruck
; Requirement(s)..: $iNumDigit Anzahl Nachkommastellen, -1 = Währungseinstellung PC (Standard)
; $iGroupDig Anzahl Zeichen für Gruppierung, -1 = 3 Zeichen (Standard)
; $sCurr Währungszeichen, -1 = Währungseinstellung PC (Standard)
; $iLeadingZero Führende Null anzeigen, -1 = Währungseinstellung PC (Standard), 0 = nein
; $fLeadingSign Währungszeichen führend anzeigen, 0 = nein (Standard)
; $fNegNumInPara Negative Werte in eckigen Klammern anzeigen, 0 = nein (Standard)
; Return Value(s).: Der formatierte Währungsstring
; Note............: Die Gruppierung ermöglicht maximal 8 Blöcke
; Author(s).......: BugFix (bugfix@autoit.de)
;===============================================================================
Func _FormatCurrency($iExpression, $iNumDigit=-1, $iGroupDig=-1, $sCurr=-1, $iLeadingZero=-1, $fLeadingSign=0, $fNegNumInPara=0)
Local $sRegKey = 'HKCU\Control Panel\International', $sReturn, $aTmp, $sTmp, $sNul = '000000000', $fNeg = 0
Local $sDec = RegRead($sRegKey, 'sMonDecimalSep'), $sThousand = RegRead($sRegKey, 'sMonThousandSep')
Local $sNegative = RegRead($sRegKey, 'sNegativeSign')
If $iGroupDig < 0 Then $iGroupDig = 3
If $sCurr = -1 Then $sCurr = RegRead($sRegKey, 'sCurrency')
If $iNumDigit = -1 Then $iNumDigit = RegRead($sRegKey, 'iCurrDigits')
If $iLeadingZero = -1 Then $iLeadingZero = RegRead($sRegKey, 'iLZero')
If IsFloat($iExpression) Then
$iExpression = Round($iExpression, $iNumDigit)
$sReturn = String($iExpression)
If $iNumDigit Then
$aTmp = StringSplit(String($iExpression), '.')
$sReturn = $aTmp[1] & Chr(29) & StringLeft($aTmp[2] & $sNul, $iNumDigit)
EndIf
Else
$sReturn = String($iExpression)
If $iNumDigit Then $sReturn = String($iExpression) & Chr(29) & StringLeft($sNul, $iNumDigit)
EndIf
If Not $iLeadingZero And StringRegExp($sReturn, '^-?0' & Chr(29) & '\d*') Then $sReturn = StringReplace($sReturn, '0' & Chr(29), Chr(29), 1)
If $iGroupDig > 0 And StringLen(Abs($sReturn)) >= $iGroupDig Then
$aTmp = StringRegExp(StringReplace($sReturn, '.', Chr(29)), _
"(-?\d{1,"&$iGroupDig&"})(\d{"&$iGroupDig&"})?(\d{"&$iGroupDig&"})?(\d{"&$iGroupDig&"})?(\d{"&$iGroupDig&"})?(\d{"&$iGroupDig&"})?(\d{"&$iGroupDig&"})?(\d{"&$iGroupDig&"})?(?:\Z|("&Chr(29)&"\d+))", 3)
For $i = 0 To UBound($aTmp) -1
If $aTmp[$i] <> '' Then $sTmp &= $sThousand & $aTmp[$i]
Next
$sReturn = StringTrimLeft(StringReplace($sTmp, $sThousand&Chr(29), Chr(29)), 1)
EndIf
If StringLeft($sReturn, 1) = '-' Then $fNeg = 1
$sReturn = StringReplace(StringReplace($sReturn, '-', $sNegative), Chr(29), $sDec)
If $fLeadingSign Then
$sReturn = $sCurr & ' ' & $sReturn
Else
$sReturn &= ' ' & $sCurr
EndIf
If $fNeg And $fNegNumInPara Then $sReturn = '[' & $sReturn & ']'
Return $sReturn
EndFunc ;==>_FormatCurrency
Alles anzeigen
Boah - das Syntaxhighlighting ist ja noch immer abartig.
500,33 € * 0,5 = 250,16 € anstatt wie es richtig wäre 250,17 € oder
Verwende Round(Expression, 2) zum kaufmännischen Runden.