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 ausdouble 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(); }