Класс 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 задают состояние объекта на основе исходных значений.