Wie kann ich Zahlen mit Tausenderzeichen in StringFormat formatieren?

  • Hi,
    StringFormat ist ein mächtiger wie unübersichtlicher Befehl. Wie kann Integerzahlen (solchen ohne Komma) mit Tausenderzeichen darstellen?

    [autoit]

    MsgBox(0, 'StringFormat', StringFormat( "%.0f", 123456789 ),5)

    [/autoit]


    herauskommen sollte 123.456.789
    Irgendwie stehe ich momentan auf dem Schlauch und bin sicher einer von Euch weiß es auf die Schnelle.
    Danke im voraus
    Jan

  • Hiermit gehts: (alles aus der Hilfe kopiert)

    [autoit]

    #Include <string.au3>

    [/autoit][autoit][/autoit][autoit]

    _StringAddThousandsSep($sString[, $sThousands = -1[, $sDecimal = -1]])

    [/autoit]

    EDIT:

    Bsp:

    [autoit]

    #include <String.au3>

    [/autoit][autoit][/autoit][autoit]

    $nAmount = 89996.31 ;anzuzeigender Wert

    [/autoit][autoit][/autoit][autoit]

    $sDelimted = _StringAddThousandsSep($nAmount) ;Wert mit Trennzeichen

    [/autoit][autoit][/autoit][autoit]

    MsgBox(64, 'Info', $sDelimted)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    $nAmt = '38849230' ;anzuzeigender Wert

    [/autoit][autoit][/autoit][autoit]

    $sDelim = _StringAddThousandsSep($nAmt) ;Wert mit Trennzeichen

    [/autoit][autoit][/autoit][autoit]

    MsgBox(64, 'Info', $sDelim)

    [/autoit]
  • 18th December, 2009 - v3.3.2.0

    Some of the following features are deprecated. Deprecated features are no longer documented but continue to work. Deprecated features will be removed after version 3.3.2.0. It is strongly recommended that scripts relying on deprecated features be updated to work with the new behavior. Some features have already been removed and will be noted as such.

    AutoIt:
    _StringAddThousandsSep() has been removed. There are too many opinions on what this function should do and too many revisions of this function have been made.
    "

  • Zitat

    In der neuesten Funktion wurde dieses umstrittenen UDF entfernt

    1. heisst es "neueste Version", und 2. wen interessiert das?
    Wenn die Funktion funktioniert, häng sie unten an dein Script und verwende sie!
    Nur weil irgendeine Funktion von irgendwem am anderen Ende der Welt in seinem Programmpaket nicht mehr mitgegeben wurde (aus welchen Gründen auch immer), heisst das doch lange nicht, dass ich diese Funktion nicht in meinen Programmen verwenden kann.
    Wenn die Entwickler in der nächsten AutoIt-Release beschliessen, GARKEINE UDF´s mehr mitzugeben, ändert sich doch auch nichts! Oder glaubst du, dass mich irgendein Mensch daran hindern kann, mir bekannte Funktionen weiter zu verwenden?

  • Hab die Funktion mal für dich rausgesucht.
    Kannst du einfach unter dein Script oder wieder in die String.au3 kopieren.

    Spoiler anzeigen
    [autoit]


    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _StringAddThousandsSep
    ; Description ...: Returns the original numbered string with the Thousands delimiter inserted.
    ; Syntax.........: _StringAddThousandsSep($sString[, $sThousands = -1[, $sDecimal = -1]])
    ; Parameters ....: $sString - The string to be converted.
    ; $sThousands - Optional: The Thousands delimiter
    ; $sDecimal - Optional: The decimal delimiter
    ; Return values .: Success - The string with Thousands delimiter added.
    ; Remarks .......:
    ; Related .......:
    ; Link ..........;
    ; Example .......; Yes
    ; ==============================================================================================================================
    Func _StringAddThousandsSep($sString, $sThousands = ",", $sDecimal = ".")
    Local $aNumber, $sLeft, $sResult = "", $iNegSign = "", $DolSgn = ""
    If Number(StringRegExpReplace($sString, "[^0-9\-.+]", "\1")) < 0 Then $iNegSign = "-" ; Allows for a negative value
    If StringRegExp($sString, "\$") And StringRegExpReplace($sString, "[^0-9]", "\1") <> "" Then $DolSgn = "$" ; Allow for Dollar sign
    $aNumber = StringRegExp($sString, "(\d+)\D?(\d*)", 1)
    If UBound($aNumber) = 2 Then
    $sLeft = $aNumber[0]
    While StringLen($sLeft)
    $sResult = $sThousands & StringRight($sLeft, 3) & $sResult
    $sLeft = StringTrimRight($sLeft, 3)
    WEnd
    $sResult = StringTrimLeft($sResult, 1); Strip leading thousands separator
    If $aNumber[1] <> "" Then $sResult &= $sDecimal & $aNumber[1] ; Add decimal
    EndIf
    Return $iNegSign & $DolSgn & $sResult ; Adds minus or "" (nothing)and Adds $ or ""
    EndFunc ;==>_StringAddThousandsSep

    [/autoit]