Класс COleCurrency

Инкапсулирует тип данных CURRENCY автоматизации OLE.

Синтаксис

class COleCurrency

Участники

Открытые конструкторы

Имя Описание
COleCurrency::COleCurrency Формирует объект COleCurrency.

Открытые методы

Имя Описание
COleCurrency::Format Создает форматируемое строковое представление COleCurrency объекта.
COleCurrency::GetStatus Возвращает состояние (допустимость) этого COleCurrency объекта.
COleCurrency::P arseCurrency Считывает значение CURRENCY из строки и задает значение COleCurrency.
COleCurrency::SetCurrency Задает значение этого COleCurrency объекта.
COleCurrency::SetStatus Задает состояние (допустимость) для этого COleCurrency объекта.

Открытые операторы

Имя Описание
оператор = Копирует COleCurrency значение.
оператор +, - Добавляет, вычитает и изменяет знак значений COleCurrency .
оператор +=, -= Добавляет и вычитает COleCurrency значение из этого COleCurrency объекта.
Оператор*/ Масштабирует COleCurrency значение по целочисленному значению.
оператор *=, /= Масштабирует это COleCurrency значение по целочисленному значению.
Оператор << COleCurrency Выводит значение в CArchive или CDumpContext.
Оператор >> COleCurrency Вводит объект из CArchive.
оператор CURRENCY Преобразует COleCurrency значение в валюту.
оператор ==, =, <<=, и т. д. Сравнивает два COleCurrency значения.

Открытые члены данных

Имя Описание
COleCurrency::m_cur Содержит базовую ВАЛЮТу для этого COleCurrency объекта.
COleCurrency::m_status Содержит состояние этого COleCurrency объекта.

Замечания

COleCurrency не имеет базового класса.

CURRENCY реализуется в виде 8-байтового целочисленного значения двух дополнений, масштабируемых на 10 000. Это позволяет получить число с фиксированной запятой с 15 разрядами слева от десятичной запятой и 4 разрядами справа от нее. Тип данных CURRENCY крайне полезен для вычислений, связанных с деньгами, или для любого вычисления фиксированной точки, где важна точность. Это один из возможных типов для VARIANT типа данных автоматизации OLE.

COleCurrency также реализует некоторые основные арифметические операции для этого типа фиксированной точки. Поддерживаемые операции были выбраны для управления ошибками округления, возникающими во время вычислений фиксированной точки.

Иерархия наследования

COleCurrency

Требования

Заголовок: afxdisp.h

COleCurrency::COleCurrency

Формирует объект COleCurrency.

COleCurrency();
COleCurrency(CURRENCY cySrc);
COleCurrency(const COleCurrency& curSrc);
COleCurrency(const VARIANT& varSrc);

COleCurrency(
    long nUnits,
    long nFractionalUnits);

Параметры

cySrc
Значение CURRENCY, скопированное в новый COleCurrency объект.

curSrc
Существующий COleCurrency объект, скопированный в новый COleCurrency объект.

varSrc
Существующая VARIANT структура данных (возможно COleVariant , объект), которая будет преобразована в значение валюты (VT_CY) и скопирована в новый COleCurrency объект.

nUnits, nFractionalUnits Указывает единицы и дробную часть (в 1/10 000) значения, скопированного в новый COleCurrency объект.

Замечания

Все эти конструкторы создают новые COleCurrency объекты, инициализированные указанным значением. Краткое описание каждого из этих конструкторов следует. Если не указано иное, для нового COleCurrency элемента задано допустимое состояние.

  • COleCurrency() Создает объект, инициализированный COleCurrency до 0 (ноль).

  • COleCurrency(cySrc) создает COleCurrency объект из значения CURRENCY .

  • COleCurrency(curSrc) создает COleCurrency объект из существующего COleCurrency объекта. Новый объект имеет то же состояние, что и исходный объект.

  • COleCurrency(varSrc) создает COleCurrency объект. Пытается преобразовать структуру VARIANT или COleVariant объект в значение валюты (VT_CY). Если это преобразование выполнено успешно, преобразованное значение копируется в новый COleCurrency объект. Если это не так, значение COleCurrency объекта равно нулю (0), а его состояние недопустимо.

  • COleCurrency(nUnits, nFractionalUnits) создает COleCurrency объект из указанных числовых компонентов. Если абсолютное значение дробной части больше 10 000, соответствующая корректировка производится в единицах. Обратите внимание, что единицы и дробная часть указываются подписанными длинными значениями.

Дополнительные сведения см . в записях CURRENCY и VARIANT в пакете SDK для Windows.

Пример

В следующих примерах показаны эффекты конструкторов нулевого параметра и двух параметров:

COleCurrency curZero;         // value: 0.0000
COleCurrency curA(4, 500);    // value: 4.0500
COleCurrency curB(2, 11000);  // value: 3.1000
COleCurrency curC(2, -50);    // value: 1.9950

COleCurrency::Format

Вызовите эту функцию-член, чтобы создать форматируемое представление значения валюты.

CString Format(DWORD  dwFlags = 0, LCID  lcid = LANG_USER_DEFAULT) const;

Параметры

dwFlags
Указывает флаги для параметров языкового стандарта. Только следующий флаг относится к валюте:

  • LOCALE_NOUSEROVERRIDE Использовать параметры языкового стандарта по умолчанию по умолчанию, а не пользовательские параметры пользователя.

lcid
Указывает идентификатор языкового стандарта, используемый для преобразования.

Возвращаемое значение

Значение CString , содержащее форматируемое значение валюты.

Замечания

Он форматирует значение с помощью спецификаций локального языка (идентификаторы языкового стандарта). Символ валюты не включен в возвращаемое значение. Если состояние этого COleCurrency объекта равно NULL, возвращаемое значение является пустой строкой. Если состояние недопустимо, возвращаемая строка указывается строковым ресурсом IDS_INVALID_CURRENCY.

Пример

COleCurrency curA;           // value: 0.0000
curA.SetCurrency(4, 500);    // value: 4.0500

// value returned: 4.05
curA.Format(0, MAKELCID(MAKELANGID(LANG_CHINESE,
   SUBLANG_CHINESE_SINGAPORE), SORT_DEFAULT));
// value returned: 4,05
curA.Format(0, MAKELCID(MAKELANGID(LANG_GERMAN,
   SUBLANG_GERMAN_AUSTRIAN), SORT_DEFAULT));

COleCurrency::GetStatus

Вызовите эту функцию-член, чтобы получить состояние (допустимость) заданного COleCurrency объекта.

CurrencyStatus GetStatus() const;

Возвращаемое значение

Возвращает состояние этого COleCurrency значения.

Замечания

Возвращаемое значение определяется перечисленным типом CurrencyStatus , определенным в COleCurrency классе.

enum CurrencyStatus {
    valid = 0,
    invalid = 1,
    null = 2
    };

Краткое описание этих значений состояния см. в следующем списке:

  • COleCurrency::valid Указывает, что этот COleCurrency объект действителен.

  • COleCurrency::invalid Указывает, что этот COleCurrency объект недопустим, то есть его значение может быть неверным.

  • COleCurrency::null Указывает, что этот COleCurrency объект имеет значение NULL, т. е. значение не было предоставлено для этого объекта. (Это значение null в смысле базы данных "отсутствие значения", а не значение C++ NULL.)

Состояние COleCurrency объекта недопустимо в следующих случаях:

  • Если его значение задано из VARIANT или COleVariant значения, которое не удалось преобразовать в значение валюты.

  • Если этот объект испытал переполнение или переполнение во время арифметической операции назначения, например += или *=.

  • Если этому объекту назначено недопустимое значение.

  • Если состояние этого объекта было явно задано как недопустимое с помощью SetStatus.

Дополнительные сведения об операциях с недопустимым состоянием см. в следующих функциях-членах:

Пример

// even an empty COleCurrency is valid
COleCurrency cy;
ASSERT(cy.GetStatus() == COleCurrency::valid);

// always valid after being set
cy.SetCurrency(4, 500);
ASSERT(cy.GetStatus() == COleCurrency::valid);

// some conversions aren't possible and will
// cause an invalid state, like this:
CByteArray array;
COleVariant varBogus(array);
cy = varBogus;
ASSERT(cy.GetStatus() == COleCurrency::invalid);

COleCurrency::m_cur

Базовая структура CURRENCY для этого COleCurrency объекта.

Замечания

Внимание

Изменение значения в CURRENCY структуре, к которым обращается указатель, возвращаемый этой функцией, изменит значение этого COleCurrency объекта. Он не изменяет состояние этого COleCurrency объекта.

Дополнительные сведения см . в записи CURRENCY в пакете SDK для Windows.

COleCurrency::m_status

Тип этого элемента данных — это перечислимый тип CurrencyStatus, который определяется в COleCurrency классе.

enum CurrencyStatus{
    valid = 0,
    invalid = 1,
    null = 2,
};

Замечания

Краткое описание этих значений состояния см. в следующем списке:

  • COleCurrency::valid Указывает, что этот COleCurrency объект действителен.

  • COleCurrency::invalid Указывает, что этот COleCurrency объект недопустим, то есть его значение может быть неверным.

  • COleCurrency::null Указывает, что этот COleCurrency объект имеет значение NULL, т. е. значение не было предоставлено для этого объекта. (Это значение null в смысле базы данных "отсутствие значения", а не значение C++ NULL.)

Состояние COleCurrency объекта недопустимо в следующих случаях:

  • Если его значение задано из VARIANT или COleVariant значения, которое не удалось преобразовать в значение валюты.

  • Если этот объект испытал переполнение или переполнение во время арифметической операции назначения, например += или *=.

  • Если этому объекту назначено недопустимое значение.

  • Если состояние этого объекта было явно задано как недопустимое с помощью SetStatus.

Дополнительные сведения об операциях с недопустимым состоянием см. в следующих функциях-членах:

Внимание

Этот элемент данных предназначен для сложных ситуаций программирования. Вы должны использовать встроенные функции-члены GetStatus и SetStatus. Дополнительные SetStatus предупреждения см. в отношении явного задания этого элемента данных.

COleCurrency::operator =

Эти перегруженные операторы присваивания копируют исходное значение валюты в этот COleCurrency объект.

const COleCurrency& operator=(CURRENCY cySrc);
const COleCurrency& operator=(const COleCurrency& curSrc);
const COleCurrency& operator=(const VARIANT& varSrc);

Замечания

Краткое описание каждого оператора выглядит следующим образом:

  • оператор =(cySrc)CURRENCY Значение копируется в COleCurrency объект и его состояние имеет допустимое значение.

  • оператор =(curSrc) Значение и состояние операнда, существующий COleCurrency объект копируется в этот COleCurrency объект.

  • оператор =(varSrc) Если преобразование VARIANT значения (или объекта COleVariant) в валюту VT_CY() успешно, преобразованное значение копируется в этот COleCurrency объект, а его состояние имеет допустимое значение. Если преобразование не выполнено, значение COleCurrency объекта имеет значение 0, а его состояние недопустимо.

Дополнительные сведения см . в записях CURRENCY и VARIANT в пакете SDK для Windows.

Пример

// set to 35.0050
COleCurrency cur1(35, 50);
COleCurrency cur2;

// operator= copies COleCurrency types
cur2 = cur1;
ASSERT(cur1 == cur2);

// can be used to assign a CURRENCY type, as well
CURRENCY cy;
cy.Hi = 0;
cy.Lo = 350050;
cy.int64 = 350050;

// perform assignment
COleCurrency cur3;
cur3 = cy;
ASSERT(cur3 == cur1);

COleCurrency::operator +, -

Эти операторы позволяют добавлять и вычитать два COleCurrency значения друг от друга и изменять знак COleCurrency значения.

COleCurrency operator+(const COleCurrency& cur) const;
COleCurrency operator-(const COleCurrency& cur) const;
COleCurrency operator-() const;

Замечания

Если любой из операндов имеет значение NULL, состояние результирующего COleCurrency значения равно NULL.

Если арифметическая операция переполнена, результирующее COleCurrency значение недопустимо.

Если операнд недопустим, а другой не имеет значения NULL, состояние результирующего COleCurrency значения недопустимо.

Дополнительные сведения о допустимых, недопустимых и пустых значениях состояния см. в переменной m_status члена.

Пример

// 35.0050
COleCurrency cur1(35, 50);
// 2.0075
COleCurrency cur2(2, 75);
COleCurrency cur3;

// sum is 37.0125
cur3 = cur1 + cur2;
ASSERT(cur3 == COleCurrency(37, 125));

// difference is 32.9975
cur3 = cur1 - cur2;
ASSERT(cur3 == COleCurrency(32, 9975));

COleCurrency::operator +=, -=

Позволяет добавлять и вычитать COleCurrency значение в этот объект и из нее COleCurrency .

const COleCurrency& operator+=(const COleCurrency& cur);
const COleCurrency& operator-=(const COleCurrency& cur);

Замечания

Если один из операндов имеет значение NULL, состояние этого COleCurrency объекта имеет значение NULL.

Если арифметическая операция переполнена, то для этого COleCurrency объекта задано недопустимое состояние.

Если один из операндов недопустим, а другой не имеет значения NULL, то для этого COleCurrency объекта задано недопустимое состояние.

Дополнительные сведения о допустимых, недопустимых и пустых значениях состояния см. в переменной m_status члена.

Пример

// both set to 35.0050
COleCurrency cur1(35, 50);
COleCurrency cur2(35, 50);

// adding 2.0075 results in 37.0125
cur1 += COleCurrency(2, 75);
ASSERT(cur1 == COleCurrency(37, 125));

// subtracting 2.0075 results in 32.9975
cur2 -= COleCurrency(2, 75);
ASSERT(cur2 == COleCurrency(32, 9975));

COleCurrency::operator * и /

Позволяет масштабировать COleCurrency значение по целочисленному значению.

COleCurrency operator*(long nOperand) const;
COleCurrency operator/(long nOperand) const;

Замечания

COleCurrency Если операнд имеет значение NULL, состояние результирующего COleCurrency значения равно NULL.

Если арифметическая операция переполнена или недополучена, состояние результирующего COleCurrency значения недопустимо.

COleCurrency Если операнд недопустим, состояние результирующего COleCurrency значения недопустимо.

Дополнительные сведения о допустимых, недопустимых и пустых значениях состояния см. в переменной m_status члена.

Пример

// 35 units and 50/10000, or 35.0050
COleCurrency cur1(35, 50);
COleCurrency cur2;

// divided by two is 17.5025
cur2 = cur1 / 2;
ASSERT(cur2 == COleCurrency(17, 5025));

// multiplied by two is 70.0100
cur2 = cur1 * 2;
ASSERT(cur2 == COleCurrency(70, 100));

COleCurrency::operator *=, /=

Позволяет масштабировать это COleCurrency значение по целочисленному значению.

const COleCurrency& operator*=(long nOperand);
const COleCurrency& operator/=(long nOperand);

Замечания

COleCurrency Если операнд имеет значение NULL, то для этого COleCurrency объекта задано значение NULL.

Если арифметическая операция переполнена, то для этого COleCurrency объекта задано недопустимое состояние.

COleCurrency Если операнд недопустим, то для этого COleCurrency объекта задано недопустимое состояние.

Дополнительные сведения о допустимых, недопустимых и пустых значениях состояния см. в переменной m_status члена.

Пример

// both set to 35.0050
COleCurrency cur1(35, 50);
COleCurrency cur2(35, 50);

// divide in half
cur1 /= 2;
ASSERT(cur1 == COleCurrency(17, 5025));

// multiply by two
cur2 *= 2;
ASSERT(cur2 == COleCurrency(70, 100));

operator <<, operator >>

Поддерживает дамп диагностики и хранение в архив.

friend CDumpContext& operator<<(
    CDumpContext& dc,
    COleCurrency curSrc);

friend CArchive& operator<<(
    CArchive& ar,
    COleCurrency curSrc);

friend CArchive& operator>>(
    CArchive& ar,
    COleCurrency& curSrc);

Замечания

Оператор извлечения ( >>) поддерживает загрузку из архива.

COleCurrency::operator CURRENCY

Возвращает структуру CURRENCY , значение которой копируется из этого COleCurrency объекта.

operator CURRENCY() const;

Замечания

COleCurrency::P arseCurrency

Вызовите эту функцию-член, чтобы проанализировать строку для чтения значения валюты.

BOOL ParseCurrency(
    LPCTSTR lpszCurrency,
    DWORD dwFlags = 0,
    LCID lcid = LANG_USER_DEFAULT);

throw(CMemoryException*);
throw(COleException*);

Параметры

lpszCurrency
Указатель на строку, завершающуюся значением NULL, которая должна быть проанализирована.

dwFlags
Указывает флаги для параметров языкового стандарта, возможно, следующий флаг:

  • LOCALE_NOUSEROVERRIDE Использовать параметры языкового стандарта по умолчанию по умолчанию, а не пользовательские параметры пользователя.

lcid
Указывает идентификатор языкового стандарта, используемый для преобразования.

Возвращаемое значение

Ненулевое значение, если строка была успешно преобразована в значение валюты, в противном случае — значение 0.

Замечания

В нем используются спецификации языка (идентификаторы языкового стандарта) для значения ненумерных символов в исходной строке.

Обсуждение значений идентификатора языкового стандарта см. в разделе "Поддержка нескольких языков".

Если строка была успешно преобразована в значение валюты, для этого COleCurrency объекта задано значение и его состояние.

Если строка не может быть преобразована в значение валюты или если произошла числовая переполнение, состояние этого COleCurrency объекта недопустимо.

Если сбой преобразования строк из-за ошибок выделения памяти, эта функция создает исключение CMemoryException. В любом другом состоянии ошибки эта функция вызывает COleException.

Пример

// works if default locale has dot decimal point
COleCurrency cur;
cur.ParseCurrency(_T("$135.95"), 0);
ASSERT(cur == COleCurrency(135, 9500));

Реляционные операторы COleCurrency

Сравните два значения валюты и возвращайте ненулевое значение, если условие имеет значение true; в противном случае — 0.

BOOL operator==(const COleCurrency& cur) const;
BOOL operator!=(const COleCurrency& cur) const;
BOOL operator<(const COleCurrency& cur) const;
BOOL operator>(const COleCurrency& cur) const;
BOOL operator<=(const COleCurrency& cur) const;
BOOL operator>=(const COleCurrency& cur) const;

Замечания

Примечание.

Возвращаемое значение операций упорядочения (<, <=, >>=) не определено, если состояние операнда равно NULL или недопустимо. Операторы равенства ( ==, !=) считают состояние операндов.

Пример

COleCurrency curOne(3, 5000);             // 3.5
COleCurrency curTwo(curOne);              // 3.5
BOOL b = (curOne == curTwo);              // TRUE

b = curOne < curTwo;                      // FALSE, same value
b = curOne > curTwo;                      // FALSE, same value
b = curOne <= curTwo;                     // TRUE, same value
b = curOne >= curTwo;                     // TRUE, same value
curTwo.SetStatus(COleCurrency::invalid);
b = curOne == curTwo;                     // FALSE, different status
b = curOne != curTwo;                     // TRUE, different status

COleCurrency::SetCurrency

Вызовите эту функцию-член, чтобы задать единицы и дробную часть этого COleCurrency объекта.

void SetCurrency(
    long nUnits,
    long nFractionalUnits);

Параметры

nUnits, nFractionalUnits Указывает единицы и дробную часть (в 1/10 000) значения, скопированного в этот COleCurrency объект.

Замечания

Если абсолютное значение дробной части больше 10 000, соответствующая корректировка выполняется в единицах, как показано в третьем из следующих примеров.

Обратите внимание, что единицы и дробная часть указываются подписанными длинными значениями. В четвертом из следующих примеров показано, что происходит, когда параметры имеют разные признаки.

Пример

COleCurrency curA;           // value: 0.0000
curA.SetCurrency(4, 500);    // value: 4.0500
curA.SetCurrency(2, 11000);  // value: 3.1000
curA.SetCurrency(2, -50);    // value: 1.9950

COleCurrency::SetStatus

Вызовите эту функцию-член, чтобы задать состояние (допустимость) этого COleCurrency объекта.

void SetStatus(CurrencyStatus  status  );

Параметры

состояние
Новое состояние этого COleCurrency объекта.

Замечания

Значение параметра состояния определяется перечисленным типомCurrencyStatus, который определяется в COleCurrency классе.

enum CurrencyStatus {
    valid = 0,
    invalid = 1,
    null = 2
    };

Краткое описание этих значений состояния см. в следующем списке:

  • COleCurrency::valid Указывает, что этот COleCurrency объект действителен.

  • COleCurrency::invalid Указывает, что этот COleCurrency объект недопустим, то есть его значение может быть неверным.

  • COleCurrency::null Указывает, что этот COleCurrency объект имеет значение NULL, т. е. значение не было предоставлено для этого объекта. (Это значение null в смысле базы данных "отсутствие значения", а не значение C++ NULL.)

Внимание

Эта функция предназначена для сложных ситуаций программирования. Эта функция не изменяет данные в этом объекте. Чаще всего оно используется для задания состояния null или недопустимого. Обратите внимание, что оператор назначения ( оператор =) и SetCurrency задают состояние объекта на основе исходных значений.

См. также

Диаграмма иерархии
Класс COleVariant