Float Wert nach ASCII



  • Ich muss double Werte in Char Zeichen konvertieren.
    Bei allen Beispielen die ich gefunden haben,
    wird die Nachkommastelle zb. bei 13.10 im Char daraus
    ein 13.1.
    Ich brauche zwei stellen nach dem Komma.

    Gibt es nicht eine bessere Möglichkeit wie
    das unten aufgeführt ist.

    [/code]
    //Meine Idee double zu ASCII
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main()
    {
    double d = 13.10;
    char buffer[10];
    sprintf(buffer, "%g", d);
    printf("%s\n", buffer);
    int size=strlen(buffer);
    char zeich=buffer[size-3];
    if(zeich != '.')
    strcat(buffer,"0");
    printf("%s\n", buffer);
    }[code]



  • Hi!

    Muss das unbedingt C sein? Eine C++ Lösung: 😉

    #include <sstream>
    
    template< typename Dst, typename Src >
    Dst lexical_cast( Src obj )
    {
    	std::stringstream sstream;
    	Dst result;
    
    	if ( !( sstream << obj && sstream >> result && 
    		( sstream >> std::ws ).eof() ) )
    	{
    		throw std::logic_error( "lexical_cast failed" );
    	}
    
    	return result;
    }
    
    int main( int argc, char **argv )
    {
    	double x = 3.1415;
    	std::string s = lexical_cast< std::string, double >( x );
    	std::cout << s.c_str() << std::endl;
    	std::cin.get();
    
    	return 0;
    }
    

    Den Doublewert kannst du ja vorher noch runden.

    grüße



  • @David_pb
    Danke erstmal die Funktionen kann ich gut gebrauchen,
    leider wieder das gleiche Problem macht aus

    double x = 3.60 als Ausgabe 3.6

    für eine Saubere Darstellung suche ich eine Funktion
    die mir das 1:1 wiedergibt float to ascii.



  • Hi!

    3.60 ist nunmal 3.6, jeder Taschenrechner wird dir das genauso ausgeben. Zur not zählst du die Nachkommastellen und hängst ein paar Nullen an.

    grüße



  • oo am ende nach dem komm asind wertlos sozusagen..
    gib der func mal 2.654 die asugabe hesit da auch "2.654".. 😉
    Mfg shade37337



  • Das geht doch garnicht.
    double speichert 3.60 immer als 3.6 ist ja nur ein Wert und kein String



  • @walljumper
    (wenn das auf meinen post bezogen war...)

    ich meinte wen n er den double/float per
    std::stringstream in einen std::string
    castet.... 🙂
    aber du hast recht er solle den double
    vor dem convertiren ncoh mal ausgeben
    dann würde er seinen "Fehler" sehen....

    Mfg Shade37337



  • Ist zwar nicht so meine Art Code zu posten, aber naja. 🙂

    std::string formatNumber(double Value, unsigned int Precision = 0, std::string DecPoint = ".") {
    
    	char buffer[255];
    	std::string tstr;
    
    	// do the conversion
    	sprintf(buffer, "%d", Precision);
    	tstr = "%." + (std::string)buffer + "f";
    	sprintf(buffer, tstr.c_str(), Value);
    	tstr = buffer;
    
    	// replace decimal point
    	int i = tstr.find(".", 0);
    	if (i > 0) { tstr.replace(i, 1, DecPoint); }
    
    	return tstr;
    }
    

    Ist mit Sicherheit nicht so super toll und man kann es bestimmt besser machen, aber es funktioniert. 😃

    Wenn jmd. Verbesserungsvorschläge hat, nur her damit, ich lerne noch. 🙂

    Wenn Du

    formatNumber(3.6, 5);
    

    aufrufst, dann erhälst Du, wie erwartet: "3.60000" als String zurück. Optional kannst Du auch noch das 'Komma' ändern. Viel Spass damit.

    // Edit: Hatte die Default-Argumente vergessen 😞



  • Äh, ging das nicht mit printf recht einfach? Irgendwie mit %f:2.2 oder sowas must halt mal die doku lesen.



  • Dank an alle.

    Ich habe für mich,das passende gefunden. 😃

    #include <iostream>
    #include <sstream>    // string streams
    
    using  std::cout ;
    using  std::endl ;
    
    int main()
    {
        std::ostringstream  oss ;
        double  d = 13.10 ;
        oss.setf( std::ios::fixed, std::ios::floatfield );
        oss.setf( std::ios::showpoint );
        oss.precision(2);	//Kommastellen
        oss << "Wert ist : " << d << endl ; 
        cout << oss.str() << endl ;
        std::cin.get();
    }
    

Anmelden zum Antworten