CString::Format



  • Hi!
    Weiss jemand von Euch wie man einen float-Wert so formatiert, dass alle 3 Stellen Punkte eingefügt werden?
    So etwa: 1.000.000 anstatt 1000000.
    Bisher mache ich es so:

    CString strZahl;
    float fZahl = 1000000;
    strZahl.Format(_T("%.f"), fZahl);
    

    Macht so aber keine Punkte.
    Habt Ihr eine Idee? 😕

    Thx + Gruß Theo



  • hier ein Beispiel

    float nFloat = 5.1234567890;
    
    CString temp;
    temp.Format("%.3f", nFloat);
    

    Ausgabe:
    "5.123"

    hoffe das kann dir das verdeutlichen 🙂
    Grüße T1c4L



  • Danke schonmal, aber ich glaube ich habe etwas unklar gefragt:
    Mir geht es nicht um die Nachkommastellen, sondern darum ein float OHNE Nachkommastellen so auszugeben, dass die dargestellte Zahl mit Punkten gegliedert wird:
    Anstatt 1000000 möchte ich 1.000.000 ausgeben.



  • mhmm mir fällt jetzt auf die schnell nix ein...

    aber wie ist es,
    wenn du die zahl in CString objekt übergibst und fuer die Ausgabe formatierst?

    man soll ja Daten und Ansicht trennen.... 👍

    MfG
    T1c4L



  • Also ich würd einfach mit GetLengh() die länge des strings abfragen. Dann würde ich mit GetAt(lengh-3) an den ersten punkt gehen, dann mit left() bzw. right() die teile von links und rechts abfragen. Aber achtung mit left und right. Informier dich vorher oder frag nochma wenn du noch nie was damit gemacht hast. Dann einfach NewString.Format("%s.%s",left,right).
    Und zack haste den ersten punkt. das machste dann so weiter bis schließlich lengh-diepunktstelle ne negative zahl is. Probiers ma aus ich hab nämlich keine ahnung ob das so funtzt. Wenn's probleme gibt, kannste ja noch ma fragen... Ich könnt dir auch ne komlette schleife machen, aber en bisschen spaß willste bestimmt auch ham... 😉

    MFG

    Hansi



  • Thx für Euren Input, ich habe mir jetzt allerdings mit der Win API geholfen:

    int GetNumberFormat(
    	LCID Locale,                // locale
    	DWORD dwFlags,              // options
    	LPCTSTR lpValue,            // input number string
    	CONST NUMBERFMT *lpFormat,  // formatting information
    	LPTSTR lpNumberStr,         // output buffer
    	int cchNumber               // size of output buffer
    );
    

    Trotzdem danke nochmal! 🙂



  • Hi,

    hier noch eine Möglichkeit:

    CString FormatStringToTripleDot(CString s)
    {
    	CString strTripleDot = _T("");
    	s = s + "   ";
    	int i, t = 0, l = s.GetLength() / 3;
    	for (i = 0; i < l ; i++)
    	{
    		strTripleDot += s.Mid(t, 3);
    		strTripleDot += ".";
    		t += 3;
    	}
    	strTripleDot.TrimRight(".");
    	strTripleDot.TrimRight();
    	strTripleDot.TrimRight(".");
    	return strTripleDot;
    }
    

    HJA


Anmelden zum Antworten