Возможно, это не тот ответ, который вы ищете, но числа с плавающей запятой не подходят для финансовых расчетов, потому что дроби типа 1/100 не могут быть представлены точно. Возможно, вам лучше сделать форматирование самостоятельно. Это может быть заключено в капсулу:
class money {
int cents;
public:
money( int in_cents ) : cents( in_cents ) {}
friend ostream &operator<< ( ostream &os, money const &rhs )
{ return os << '$' << m.cents / 100 << '.' << m.cents % 100; }
};
cout << money( 123 ) << endl; // prints $1.23
Еще лучше (?), В C ++ есть средство, называемое денежная языковая категория , которое включает средство форматирования денег , которое принимает в качестве аргумента центы.
locale::global( locale("") );
use_facet< money_put<char> >( locale() ).put( cout, false, cout, ' ', 123 );
Это должно сделать правильно на международном уровне, печатая местную валюту пользователя и скрывая количество десятичных знаков от вашей реализации. Он даже принимает доли цента. К сожалению, это, похоже, не работает в моей системе (Mac OS X), которая обычно имеет плохую поддержку локали. (Linux и Windows должны быть лучше.)