[TriLUG] [OT] C++ question: currency formatting like java NumberFormat in C++?

Owen Berry oberry at trilug.org
Mon Jul 17 11:44:32 EDT 2006


And below is some sample code: 

#include <iostream>
#include <locale>

using namespace std;
typedef ostreambuf_iterator<char,char_traits<char> > Iter;

int main(int argc, char* argv[])
{
    long double value = 1234387;
    locale loc("en_US");

    // Get money_put reference for locale
    const money_put<char> &mp = use_facet<money_put<char> >(loc);

    cout.imbue(loc);	// Set locale for cout
    cout << showbase;	// Display currency symbol

    // Put formatted value on cout
    mp.put (Iter(cout), false, cout, ' ', value);

    cout << endl;
}

You can download it from http://www.trilug.org/~oberry/money.cpp, with a
few additional comments. My success in getting this to work with
European locales was patchy, maybe due to the currency changes with the
EU, but it worked for the US and South Africa (my land of origin). Tried
it on 3 different machines and it worked fine.

For some information on the details, you'll need to do some reading of
your own, as mentioned in my previous reply (below).

Owen

On Fri, Jul 14, 2006 at 04:31:58PM -0400, Owen Berry wrote:
> Sorry to reply to this after the fact, but it was a case of getting to
> the right book in the right place. Unfortunately I can't tell you
> exactly what to do, but I can try to point you in the right direction.
> What you need to look at is locales and facets ... search for "c++
> locale facet" in Google and you'll come up some stuff.
> 
> Also, if you have access to "The C++ Standard Library" by Josuttis there
> is some info in the internationalization section.
> 
> I'm interested, so if I have a chance I'll send out an example if I have
> a chance to put one together. Unfortunately I don't understand this yet,
> so I'm much in the same boat.
> 
> Owen
> 
> On Thu, Jul 13, 2006 at 01:25:22PM -0400, Doug Taggart wrote:
> > Hello,
> > 
> > I'm hoping someone can help me with something that I think should have 
> > been easy for me to find.
> > 
> > I'm coding a C++ program.  I have a need to format a number for currency 
> > display.
> > 
> > In Java, I would use this for a quick and dirty way of getting US 
> > dollars (not checking for international stuff).
> > 
> > NumberFormat currency = NumberFormat.getCurrencyInstance(); 
> > 
> > Then wherever I needed too I could.
> > currency.format(myNumericVariable)  into a section of code that 
> > displayed the return value as nice nifty US dollars complete
> > with $, decimal point and ,'s as appropriate.
> > 
> > =====
> > 
> > I can't seem to find something similar as part of the standard c/c++ 
> > libraries, which I find hard to believe.
> > I'm sure I'm just not searching for the right terms, "NumberFormat", 
> > "currency", "money", "formatting" etc..
> > 
> > Anyway, pointers appreciated..
> > 
> > Doug T



More information about the TriLUG mailing list