Nachkommastellen - immer die "richtige" Genauigkeit
-
Hi Leute,
ich möchte Zahlen in Strings verpacken und hab dazu mal folgendes Beispiel gefunden:
template<class T> string numtostr(T num) { ostringstream temp; temp<<num; return temp.str(); }Das ganze funktioniert eigentlich ganz gut, nur ist die Ausgabe auf 3 Nachkommastellen beschränkt. Ich möchte aber nicht mit precision() einen festen Wert angeben, falls 1.1 übergeben wird soll 1.1, nicht 1.0000000 im String stehen, bei 1.123456789 aber dann auch 1.123456789, also immer so viele Stellen wie verfügbar/sinnvoll sind.
Wie kann ich das hinbekommen?
-
edit2: nun weiß ich doch net was du meinst, das sollte doch eh schon gehen. post doch mal ein minimalbeispiel zum kompilieren.
-
Passt vielleicht nicht ganz in deinen Code aber ich hätte das so gemacht:
#include <string.h> for(unsigned int i= strlen(String);String[i] == '0'; i--) { String[i] = ' '; }Ich hab das jetzt nicht getestet aber so in etwa dürfte es funktionieren.
-
#include <iostream> #include <sstream> #include <iomanip> template<class T> std::string numtostr(T num) { std::ostringstream temp; temp << std::setprecision(10) << num; return temp.str(); } int main() { double a = 1.01; std::cout << numtostr(a) << std::endl; a = 1.23456789; std::cout << numtostr(a) << std::endl; }1.01 1.23456789mfg.
-
Schon mal Danke für die Vorschläge, gibts vielleicht ne Möglichkeit das dem stringstream direkt abzugewöhnen?
@Thomas:
Hier der Code zum compilieren (Die Nachkommastellen werden schon vom stringstream abgeschnitten, das cout bekommt ja dann einen String):#include <iostream> #include <string> #include <sstream> using namespace std; template<class T> string numtostr(T num) { ostringstream temp; temp<<num; return temp.str(); } int main(void) { cout<<numtostr(1.1)<<endl; cout<<numtostr(1.123456789)<<endl; cout<<numtostr(123.45678)<<endl; return 0; }Ausgabe:
1.1
1.12346
123.457
-
mumic schrieb:
Schon mal Danke für die Vorschläge, gibts vielleicht ne Möglichkeit das dem stringstream direkt abzugewöhnen?
Was abzugewöhnen?????????
-
@hä?: scroll nach oben!
@gfgfhd: Danke, genau so funktionierts!
Komischerweise hab ich bei meinem ersten Versuch mit precision() dann manchmal z.B. 1.099999999999 bekommen, muss aber wohl an was anderem gelegen haben.Nochmals herzlichen Dank, auch für die anderen Vorschläge