Konvertierung mit _fcvt



  • Hihi,

    ich konvertiere double-Wert immer mit folgendem Code:

    //Konvertierung von double in CString
    
        strTmp = _fcvt(wert, 3, &decimal, &sign);
        strInt = strTmp.Left(decimal);     //beinhaltet integer vor dem Komma
        strDecimal = strTmp.Mid(decimal);  //beinhaltet alles nach dem Komma
    
        if (strInt.IsEmpty())
        {
            strInt = '0';
        }
    
        CString m_strwert;
    
        m_strwert.Format ("%s.%s",strInt,strDecimal);
    

    Nun habe ich aber zwei Probleme.

    Erstens verliere ich das Minuszeichen. OK, dies kann ich abfangen in dem ich kontrolliere ob der double-Wert kleiner Null ist und ggf. ein Minuszeichen vor den String klebe. Das lässt sich also lösen.

    Mein zweites Problem ist gravierender. Habe ich kleine Wert, z.B. 0.00258 und will den konvertieren, dann steht in strInt nichts -> daraus setzte ich 0. in strDecimal steht komischerweise 3 drin. in decimal steht -2. wie kommt dass?
    und wie kann ich das beheben. irgendwie wäre wünschenswert, wenn in m_strDecimal 003 drinsteht.

    Notfalls müsste ich die nullen auffüllen, aber das ist doch keine schöne lösung.

    ihr habt bestimmt eine viel bessere idee.

    danke

    liebe Grüße

    Andrea



  • andrea19791 schrieb:

    ihr habt bestimmt eine viel bessere idee.

    nimm doch 'CString::Format()'



  • wie soll das funktionieren? ich will doch einen double umwandeln.

    schreib mal noch ein wenig genauer.

    danke

    andrea



  • andrea19791 schrieb:

    wie soll das funktionieren? ich will doch einen double umwandeln.

    willst du nicht aus 'nem double ein CString machen?
    also wenn ich dich nicht falsch verstehe...

    CString s;
       double d = 123.45678;
       s.Format ("%lf", d);
    


  • oh, sorry du hast ja schon recht. kann ich auch irgendwie steuern, wieviele nachkommastellen mitgenommen werden?

    liebe grüße
    Andrea



  • andrea19791 schrieb:

    oh, sorry du hast ja schon recht. kann ich auch irgendwie steuern, wieviele nachkommastellen mitgenommen werden?

    klar geht das:

    s.Format ("%.39lf", d);  // 39 nachkommastellen ;)
    

    wenn du's variabel haben willst musste den formatstring selber formatieren, ebenfalls mit CString::Format()...



  • vielen dank,

    da habe ich bisher wohl ein wenig umständlich programmiert.

    vielen herzlichen dank

    liebe grüße

    andrea


Anmelden zum Antworten