Wie formatiere ich eine Zahl mit StringFormat?

  • Hallo Ihr Wissenden,

    ich scheitere gerade an StringFormat :( Ich krieg es einfach nicht gebacken.

    §MeineZahl = 1234567890

    Als Ergebnis hätte ich gerne 1.234.567.890 oder auch gerne mit 2 Nachkommastellen 1.234.567.890,00

    Wie muß die Syntax für StringFormat aussehen?

    StringFormat( ???, §MeineZahl )

    Habt Dank im voraus!
    Mike

  • hi

    versuche es mal so mit

    Spoiler anzeigen
    [autoit]

    $meinezahl = 1234567890

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

    $S =StringFormat ( "$meinezahl = %.2f" ,$meinezahl)

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

    MsgBox(0, "Result", $S)

    [/autoit]


    Taucher

    :P Streite nie mit einem Idioten
    Erst zieht er dich auf sein Niveau herunter und schlägt dich dort mit seiner Erfahrung :D

  • Hallo Taucher,

    hab Dank für Deine Antwort, aber das liefert 1234567890.00

    Das hatte ich leider auch schon :( Auch mit "%#d" oder "%#f" funktioniert es nicht.

    Servus
    Mike

    • Offizieller Beitrag

    Schau Dir mal _StringAddComma() aus den UDFs an.
    Die Funktion macht genau das, was Du willst.

    Edit: Oder, Nein! Da gab es ja das Problem mit der deutschen Darstellung der Werte. Deshalb hatte ich ja mal eine eigene Funktion geschrieben:

    [autoit]


    Func xStringAddComma($sStr, $sSeparator = ',', $sEnd = '.')
    Local $aNum = StringSplit($sStr, '.,'), $l = StringLen($aNum[1]), $r = ''
    If $aNum[0] > 2 Then Return SetError(1, 0, $sStr)
    Switch $l
    Case 0 To 3
    Return StringRegExpReplace($sStr, '[.,]', $sEnd)
    Case Else
    For $i = 1 To Int($l / 3)
    $r = $sSeparator & StringRight($aNum[1], 3) & $r
    $aNum[1] = StringTrimRight($aNum[1], 3)
    Next
    $r = StringTrimLeft($aNum[1] & $r, $aNum[1] = '')
    If $aNum[0] > 1 Then $r &= $sEnd & $aNum[2]
    Return $r
    EndSwitch
    EndFunc

    [/autoit]

    Die Funktion kannst Du dann einfach so aufrufen:

    [autoit]


    $r = xStringAddComma(123456789.567, '.', ',')

    [/autoit]

    Ergebnis ($r) wäre dann: 123.456.789,567

  • Hallo Oscar,

    Du bist ne Wucht! Hab herzlichen Dank, es funktioniert wie von mir gewünscht! :rock:

    Allerdings verstehe ich die Funktion nicht und mit den beiden Argumenten ( $sSeparator, $sEnd ) hatte ich auch so meine Probleme, aber Dein Beispiel und die Vorbelegung der Variablen machte es klarer.

    Ebenfalls entnehme ich Deiner Lösung, daß es wohl mit StringFormat nicht zu lösen ist. Mich wundert das, denn das sollte doch eigentlich oft gebraucht werden.

    Nochmals besten Dank und ein schönes sonniges Wochenende!
    Mike

    • Offizieller Beitrag

    $sSeparator ist das Zeichen, das alle drei Zeichen gesetzt werden soll. Im obigen Beispiel halt der Punkt. $sEnd ist das Dezimaltrennzeichen. Diese beiden Werte kann man der Funktion als Parameter mitgeben. Werden sie weggelassen, benutzt die Funktion die Defaultwerte ($sSeparator = ',' und $sEnd = '.').

  • Hallo Oscar,

    $sSeparator ist das Zeichen, das alle drei Zeichen gesetzt werden soll. Im obigen Beispiel halt der Punkt. $sEnd ist das Dezimaltrennzeichen. Diese beiden Werte kann man der Funktion als Parameter mitgeben. Werden sie weggelassen, benutzt die Funktion die Defaultwerte ($sSeparator = ',' und $sEnd = '.').

    speziell mit dem $sEnd hatte ich so meine Probleme. Ich hab das dann schon verstanden und beide Variablen umbenannt. Jetzt verstehe ich es ohne nachdenken zu müssen :)

    $sSeparator wurde zu $PunktZeichen
    $sEnd wurde zu $KammaZeichen

    Hab Dank und ein schönes Wochenende!
    Mike

    PS: Wie schließe ich diesen Thread?

  • Hallo Oskar,

    ein Anliegen hätte ich noch :) Ich hab mit der Funktion noch etwas Verständnisporbleme.

    Was müßte an der Funktion verändert werden, damit ich auch die Anzahl der Nachkommastellen angeben kann. Rundung wäre schön.

    xStringAddComma($sStr, $sSeparator = ',', $sEnd = '.', $sDeziCount = 2)

    xStringAddComma("1234,1", undefined '.', ',', 2) => 1.234,10
    xStringAddComma("1234,1234", undefined '.', ',', 2) => 1.234,12

    Ist sowas leicht zu realisieren oder muß ich vorher die Zahl irgendwie auf die Länge bringen?

    Hab Dank!
    Mike

    • Offizieller Beitrag

    Hi,

    [autoit]

    Global $MeineZahl = 1234567890

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

    ConsoleWrite(changeNumber(StringFormat('%.2f', $MeineZahl), '.', ',') & @CRLF)

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

    Func changeNumber($sStr, $sSeparator = ',', $sEnd = '.')
    Local $aNum = StringSplit($sStr, '.,'), $l = StringLen($aNum[1]), $r = ''
    If $aNum[0] > 2 Then Return SetError(1, 0, $sStr)
    Switch $l
    Case 0 To 3
    Return StringRegExpReplace($sStr, '[.,]', $sEnd)
    Case Else
    For $i = 1 To Int($l / 3)
    $r = $sSeparator & StringRight($aNum[1], 3) & $r
    $aNum[1] = StringTrimRight($aNum[1], 3)
    Next
    $r = StringTrimLeft($aNum[1] & $r, $aNum[1] = '')
    If $aNum[0] > 1 Then $r &= $sEnd & $aNum[2]
    Return $r
    EndSwitch
    EndFunc

    [/autoit]
  • Hallo Xenobiologist,

    hab Dank für das Entfernen des Bretts vor meinem Kopf! :-((( Ich laß das besser für dieses Wochenende und gehe an die frische Luft!

    Habt Dank für Eure Unterstützung. Allen ein sonniges und schönes Wochenende!
    Mike