2017-09-07 18 views
5

Tutaj mój problem: chcę napisać float z maksymalnie dwoma miejscami po przecinku do napisu i wydrukować go bez kilku zer za numerem.C++ float to string o określonej długości

Sposób, w jaki to zrobić w tej chwili:

Values Material;   // Class 'Values', Object 'Material' 
Material.Temp = 15.56; // 'Temp' = float 

string ss = to_string(Material.Temp); // Conversion to string 
const char* cNumber = ss.c_str();  // Conversion to const char 
HPDF_Page_ShowText(page, cNumber); 

To wypisuje: +15,56000000

HPDF_Page_ShowText jest polecenie z open source libharu biblioteki do tworzenia dokumentów PDF. Oczekuje (page-object, *const char). Z tego powodu ciąg musi zostać najpierw przekształcony w const char*.

Naprawdę szukałem w Internecie podobnych problemów, ale nie znalazłem żadnego, który by pasował do mojego.

+0

Czy "#include " może ci się przydać? Możesz użyć polecenia 'setprecision (2)' i powinno ono uciąć liczbę zmiennoprzecinkową. Chyba, że ​​naprawdę potrzebujesz go w formacie smyczkowym? – Sailanarmo

Odpowiedz

5

pomocą funkcji std::stringstream i std::setprecision() w połączeniu z manipulatorem std::fixed strumienia:

#include <iostream> 
#include <iomanip> 
#include <sstream> 
#include <string> 

int main(){ 
    float myfloat = 15.56f; 
    std::stringstream ss; 
    ss << std::fixed << std::setprecision(2) << myfloat; 
    std::string s = ss.str(); 
    std::cout << s; 
} 

Zmienna const char* można uzyskać przez:

const char* c = s.c_str(); 

Update:
wolą std::ostringstream ponieważ strumień używane tylko dla wyjścia.

+0

Tak, to pomogło. Dziękuję Ci bardzo! –

+3

Zamiast tego należy użyć 'std :: ostringstream'. –

Powiązane problemy