13.2. Writing and Reading Numbers
Problem
You need to write a number to a stream in a formatted way that obeys local conventions, which are different depending on where you are.
Solution
Imbue the stream you are writing to with the current locale and then write the numbers to it, as in Example 13-2, or you can set the global locale and then create a stream. The latter approach is explained in the discussion.
Example 13-2. Writing numbers using localized formatting
#include <iostream> #include <locale> #include <string> using namespace std; // There is a global locale in the background that is set up by the // runtime environment. It is the "C" locale by default. You can // replace it with locale::global(const locale&). int main() { locale loc(""); // Create a copy of the user's locale cout << "Locale name = " << loc.name() << endl; cout.imbue(loc); // Tell cout to use the formatting of // the user's locale cout << "pi in locale " << cout.getloc().name() << " is " << 3.14 << endl; }
Discussion
Example 13-2 shows how to use the
user’s locale to format a floating-point number. Doing so requires two steps, creating an
instance of the locale
class and then
associating, or imbuing, the stream with it.
To begin with, Example 13-2 creates
loc
, which is a copy of the user’s locale. You have
to do this using locale
’s constructor with an empty
string (and not the default constructor), like this:
locale loc("");
The difference is subtle but important, and I’ll come back to it in a moment. Creating ...
Get C++ Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.