Форматирование валюты с помощью C ++ - PullRequest
2 голосов
/ 16 июня 2011

Есть ли очевидный способ выполнить форматирование валюты в C ++?

Например: 1978879 станет 1'978'879

Спасибо

Ответы [ 2 ]

6 голосов
/ 16 июня 2011

Краткий ответ:

int value = 1978879;
std::cout.imbue(std::locale(""));
std::cout << value << std::endl;

Локали отвечают за форматирование. Любой поток может быть пропитан локалью; по умолчанию они используют глобальный языковой стандарт, который по умолчанию является языковым стандартом «C», в котором не используются разделители тысяч. Создавая экземпляр локали с пустой строкой в ​​качестве параметра, мы используем локаль пользователя, которая в вашем случае, скорее всего, будет швейцарской.

Вы также можете указать явное имя локали, но имена различаются в зависимости от вашей платформы (Linux / Windows), и не все системы поддерживают все локали.

Если вы хотите получить строку, возможно, самый простой способ - использовать поток строк (из заголовка <sstream>):

std::ostringstream stream;
stream.imbue(std::locale(""));
stream << value;
std::string stringValue = stream.str();

Хотя вы также можете напрямую использовать фасеты локали, но это сложнее.

Вы также можете установить глобальный языковой стандарт, который будет использоваться всеми потоками (если только они не будут специально наполнены другим языковым стандартом):

std::locale::global(std::local(""));
1 голос
/ 16 июня 2011

Взгляните на стандартную библиотеку локализации C ++.Это не так просто, но вы, вероятно, можете достичь этого с помощью num_get / numpunct граней.

...