COleCurrency 类

封装 OLE 自动化的 CURRENCY 数据类型。

语法

class COleCurrency

成员

公共构造函数

名称 描述
COleCurrency::COleCurrency 构造 COleCurrency 对象。

公共方法

名称 描述
COleCurrency::Format 生成 COleCurrency 对象的带格式字符串表示形式。
COleCurrency::GetStatus 获取此 COleCurrency 对象的状态(有效性)。
COleCurrency::ParseCurrency 从字符串中读取 CURRENCY 值并设置 COleCurrency 的值。
COleCurrency::SetCurrency 设置此 COleCurrency 对象的值。
COleCurrency::SetStatus 设置此 COleCurrency 对象的状态(有效性)。

公共运算符

“属性” 描述
operator = 复制 COleCurrency 值。
operator +, - COleCurrency 值相加和相减以及更改其符号。
operator +=, -= 在此 COleCurrency 对象中加减 COleCurrency 值。
operator */ 按整数值缩放 COleCurrency 值。
operator *=, /= 按整数值缩放此 COleCurrency 值。
operator << COleCurrency 值输出到 CArchiveCDumpContext
operator >> CArchive 输入一个 COleCurrency 对象。
operator CURRENCY COleCurrency 值转换为某种货币。
operator ==、<、<= 等 比较两个 COleCurrency 值。

公共数据成员

“属性” 描述
COleCurrency::m_cur 包含此 COleCurrency 对象的基础 CURRENCY。
COleCurrency::m_status 包含此 COleCurrency 对象的状态。

备注

COleCurrency 没有基类。

CURRENCY 是作为按 10,000 缩放的 8 字节补码整数值实现的。 这产生了一个定点数数字,小数点左侧有 15 位数,右侧有 4 位数。 CURRENCY 数据类型对于涉及到货币的计算或精确度至关重要的所有定点数计算非常有用。 它是 OLE 自动化的 VARIANT 数据类型的可能类型之一。

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
要复制到新 COleCurrency 对象中的 CURRENCY 值。

curSrc
要复制到新 COleCurrency 对象中的现有 COleCurrency 对象。

varSrc
要转换为货币值 (VT_CY) 并复制到新 COleCurrency 对象中的现有 VARIANT 数据结构(可能是 COleVariant 对象)。

nUnits、nFractionalUnits 指示要复制到新 COleCurrency 对象中的值的单位和小数部分(精度为 1/10,000)

备注

所有这些构造函数将创建初始化为指定值的新 COleCurrency 对象。 下面是其中每个构造函数的简要说明。 除非另有说明,否则新 COleCurrency 项的状态设置为有效。

  • COleCurrency() 构造一个初始化为 0(零)的 COleCurrency 对象。

  • COleCurrency(cySrc) 从 CURRENCY 值构造 COleCurrency 对象。

  • COleCurrency(curSrc) 从现有 COleCurrency 对象构造 COleCurrency 对象。 新对象的状态与源对象相同。

  • COleCurrency(varSrc) 构造 COleCurrency 对象。 尝试将 VARIANT 结构或 COleVariant 对象转换为货币 (VT_CY) 值。 如果这种转换成功,则转换后的值将复制到新的 COleCurrency 对象中。 否则,COleCurrency 对象的值将设置为零 (0),其状态将设置为无效。

  • COleCurrency(nUnits, nFractionalUnits) 从指定的数值组件构造 COleCurrency 对象。 如果小数部分的绝对值大于 10,000,则对单位进行相应的调整。 请注意,单位和小数部分由带符号的长型值指定。

有关详细信息,请参阅 Windows SDK 中的 CURRENCYVARIANT 条目。

示例

以下示例演示了零参数和双参数构造函数的效果:

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
指示用于转换的区域设置 ID。

返回值

包含带格式货币值的 CString

注解

它使用本地语言规范(区域设置 ID)来设置值的格式。 返回的值中不包含货币符号。 如果此 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 值的状态。

备注

返回值由 COleCurrency 类中定义的 CurrencyStatus 枚举类型定义。

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

有关这些状态值的简要说明,请参阅以下列表:

  • COleCurrency::valid 指示此 COleCurrency 对象有效。

  • COleCurrency::invalid 指示此 COleCurrency 对象无效;也就是说,它的值可能不正确。

  • COleCurrency::null 指示此 COleCurrency 对象为 null,也就是说,未为此对象提供值。 (与 C++ NULL 不同,此处的“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

COleCurrency 对象的基础 CURRENCY 结构。

备注

注意

更改此函数返回的指针所访问的 CURRENCY 结构中的值会更改此 COleCurrency 对象的值。 这不会更改此 COleCurrency 对象的状态。

有关详细信息,请参阅 Windows SDK 中的 CURRENCY 条目。

COleCurrency::m_status

此数据成员的类型是 COleCurrency 类中定义的枚举类型 CurrencyStatus

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

备注

有关这些状态值的简要说明,请参阅以下列表:

  • COleCurrency::valid 指示此 COleCurrency 对象有效。

  • COleCurrency::invalid 指示此 COleCurrency 对象无效;也就是说,它的值可能不正确。

  • COleCurrency::null 指示此 COleCurrency 对象为 null,也就是说,未为此对象提供值。 (与 C++ NULL 不同,此处的“null”是数据库意义上的“没有值”。)

COleCurrency 对象的状态在以下情况下无效:

  • 如果其值是从无法转换为货币值的 VARIANT 或 COleVariant 值设置的。

  • 如果此对象在算术赋值运算(例如 +=*=)期间发生溢出或下溢。

  • 如果为该对象赋了无效值。

  • 如果使用 SetStatus 将此对象的状态显式设置为无效。

有关可能将状态设置为无效的运算的详细信息,请参阅以下成员函数:

注意

此数据成员用于高级编程。 应使用内联成员函数 GetStatusSetStatus。 请参阅 SetStatus 了解有关显式设置此数据成员的其他注意事项。

COleCurrency::operator =

这些重载的赋值运算符将源货币值复制到此 COleCurrency 对象中。

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

备注

每个运算符的简要说明如下:

  • operator =(cySrc)CURRENCY 值将复制到 COleCurrency 对象中,并且其状态将设置为有效。

  • operator =(curSrc) 操作数(现有的 COleCurrency 对象)的值和状态将复制到此 COleCurrency 对象中。

  • operator =(varSrc) 如果将 VARIANT 值(或 COleVariant 对象)转换为货币 (VT_CY) 成功,则转换后的值将复制到此 COleCurrency 对象中,并且其状态将设置为有效。 如果转换失败,则 COleCurrency 对象的值将设置为 0,其状态将设置为无效。

有关详细信息,请参阅 Windows SDK 中的 CURRENCYVARIANT 条目。

示例

// 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 值的状态为无效。

有关有效、无效和 null 状态值的详细信息,请参阅 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 对象的状态将设置为无效。

有关有效、无效和 null 状态值的详细信息,请参阅 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 值的状态为无效。

有关有效、无效和 null 状态值的详细信息,请参阅 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 对象的状态将设置为无效。

有关有效、无效和 null 状态值的详细信息,请参阅 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::ParseCurrency

调用此成员函数可分析字符串以读取货币值。

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

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

参数

lpszCurrency
指向要分析的以 null 结尾的字符串的指针。

dwFlags
指示区域设置的标志,可能是以下标志:

  • LOCALE_NOUSEROVERRIDE:使用系统默认区域设置,而不是自定义的用户设置。

lcid
指示用于转换的区域设置 ID。

返回值

如果字符串成功转换为货币值,则返回非零值,否则返回 0。

备注

它使用本地语言规范(区域设置 ID)来表示源字符串中的非数字字符。

有关区域设置 ID 值的介绍,请参阅支持多种语言

如果字符串已成功转换为货币值,则此 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 指示要复制到此 COleCurrency 对象中的值的单位和小数部分(精度为 1/10,000)

备注

如果小数部分的绝对值大于 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  );

参数

status
COleCurrency 对象的新状态。

备注

status 参数值由 COleCurrency 类中定义的 CurrencyStatus 枚举类型定义

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

有关这些状态值的简要说明,请参阅以下列表:

  • COleCurrency::valid 指示此 COleCurrency 对象有效。

  • COleCurrency::invalid 指示此 COleCurrency 对象无效;也就是说,它的值可能不正确。

  • COleCurrency::null 指示此 COleCurrency 对象为 null,也就是说,未为此对象提供值。 (与 C++ NULL 不同,此处的“null”是数据库意义上的“没有值”。)

注意

此函数用于高级编程。 此函数不会更改此对象中的数据。 它最常用于将状态设置为 null 或无效。 请注意,赋值运算符 (operator =) 和 SetCurrency 根据源值设置对象的状态。

另请参阅

层次结构图
COleVariant 类