c++ és iomanip

Fórumok

Az lenne a kérdésem hogy iomanip vagy esetleg más segítségével ki lehet e iratni egy double számot a következoő formátumban:
"egész rész 2-es szélességgel" "," "tört rész 3-as szélességgel"

Például: 3.17 -et szeretném ilyen formában kiirni: 03,170

Megnéztem az iomanip-ban levő beállítasi lehetőségeket, de például arra nem láttam megoldást hogy
"." helyett "," legyen a tizedes jel.

Meg tudom oldalni, de szerintem nem egy túl praktikus megoldás (keletkezik némi kerekítési hiba):

...
double a=3.17;
cout << setfill('0') << setw(2) << (int)a << "," << setw(3) << (int)((a -(int)a)*1000);
...

Ennek eredménye ez lesz: 03,169

Ha valaki tud egy egyszerűbb megoldást, akkor ne kíméljen! :)

Előre is kösz: Safi

Hozzászólások

sima C megoldás, ami gondolom C++-ban is ugyanígy működik:
a progi indítása előtt
export LC_NUMERIC=hu_HU
a progiban pedig:
setlocale(LC_NUMERIC, "");
double a=3.17;
printf("%06.3f", a);

írj egy double-wrappert, aminek kell egy double konstruktor. ezen kívül kell egy
std::ostream& operator<<(std::ostream&,const double_wrapper&) függvény - és kb így fogod kiírni:
std::cout << double_wrapper(val);