Читаем C++. Сборник рецептов полностью

Пример 13.7. Вывод информации о форматировании денежных значений

#include

#include

#include


using namespace std;


string printPattern(moneypunct::pattern& pat) {

 string s(pat.field); // pat.field имеет тип char[4]

 string r;

 for (int i = 0; i < 4; ++i) {

  switch (s[i]) {

  case moneypunct::sign:

   r += "sign ";

   break;

  case moneypunct::none:

   r += "none ";

   break;

  case moneypunct::space:

   r += "space ";

   break;

  case moneypunct::value:

   r += "value ";

   break:

  case moneypunct::symbol:

   r += "symbol ";

   break;

  }

 }

 return(r);

}


int main() {

 locale loc("danish");

 const moneypunct& punct =

  use_facet >(loc),

 cout << "Decimal point: " << punct.decimal_point() << '\n'

  << "Thousands separator. " << punct.thousands_sep() << '\n'

  << "Currency symbol: " << punct.curr_symbol() << '\n'

  << "Positive sign: " << punct.positive_sign() << '\n'

  << "Negative sign: " << punct.negative_sign() << '\n'

  << "Fractional digits: " << punct.frac_digits() << '\n'

  << "Positive format: "

  << printPattern(punct pos_format()) << '\n'

  << "Negative format: "

  << printPattern(punct.neg_format()) << '\n';

 // Группировки описываются символьной строкой, но осмысленными

 // являются числовые значения символов, а не собственно символы

 string s = punct.grouping();

 for (string::iterator p = s.begin(); p != s.end(); ++p)

  cout << "Groups of: " << (int)*p << '\n';

}

Назначение большинства этих методов самоочевидно, но некоторые методы требуют дополнительных пояснений. Во-первых, метод grouping возвращает строку символов, которая интерпретируется как строка целочисленных значений. Каждый символ описывает свою группу цифр в числе, начиная с правой стороны числа. И если в какой-то позиции строки нет значения, то используется значение в предыдущей позиции. Другими словами, для стандартного американского формата в позиции 0 этой строки будет значение 3, что означает три цифры для группы с индексом 0. Поскольку других значений нет, все группы с индексом, большим нуля, должны также состоять из трех цифр.

pos_format и neg_format возвращают объект типа moneypunct::pattern, который имеет член field типа T[4], где T — символьный тип. Каждый элемент поля field содержит один из элементов перечисления moneypunct::part, который имеет пять возможных значений: none, space, symbol, sign и value. Строковое представление денежного значения состоит из четырех частей (т.е. массив с четырьмя элементами) Обычно части денежного значения образуют последовательность symbol space sign value (символ валюты пробел знак значение), что означало бы вывод, например, значения $ -32.00. Часто знак плюс заменяется пустой строкой, поскольку значение без знака обычно рассматривается как положительное значение. Признак отрицательного числа может содержать несколько символов, как, например, «()», и в этом случае первый символ выдается в части symbol формата отрицательного числа (neg_format), а другой символ выдается в конце, поэтому отрицательные числа могут иметь, например, такой вид: $(32.00).

Большую часть времени вам не придется беспокоиться по поводу получения информации о форматировании, содержащейся в moneypunct. Однако если вам необходимо выполнить большой объем формирования денежных значений в различных локализациях, то имеет смысл поэкспериментировать и познакомиться с особенностями форматирования в различных локализациях.

Смотри также

Рецепты 13.2 и 13.3.

13.5. Сортировка локализованных строк

Проблема

Имеется последовательность строк, содержащая символы не в коде ASCII, и требуется ее отсортировать с учетом местных особенностей.

Решение

Перейти на страницу:

Похожие книги

1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных
C++ Primer Plus
C++ Primer Plus

C++ Primer Plus is a carefully crafted, complete tutorial on one of the most significant and widely used programming languages today. An accessible and easy-to-use self-study guide, this book is appropriate for both serious students of programming as well as developers already proficient in other languages.The sixth edition of C++ Primer Plus has been updated and expanded to cover the latest developments in C++, including a detailed look at the new C++11 standard.Author and educator Stephen Prata has created an introduction to C++ that is instructive, clear, and insightful. Fundamental programming concepts are explained along with details of the C++ language. Many short, practical examples illustrate just one or two concepts at a time, encouraging readers to master new topics by immediately putting them to use.Review questions and programming exercises at the end of each chapter help readers zero in on the most critical information and digest the most difficult concepts.In C++ Primer Plus, you'll find depth, breadth, and a variety of teaching techniques and tools to enhance your learning:• A new detailed chapter on the changes and additional capabilities introduced in the C++11 standard• Complete, integrated discussion of both basic C language and additional C++ features• Clear guidance about when and why to use a feature• Hands-on learning with concise and simple examples that develop your understanding a concept or two at a time• Hundreds of practical sample programs• Review questions and programming exercises at the end of each chapter to test your understanding• Coverage of generic C++ gives you the greatest possible flexibility• Teaches the ISO standard, including discussions of templates, the Standard Template Library, the string class, exceptions, RTTI, and namespaces

Стивен Прата

Программирование, программы, базы данных