COleCurrency Class
The latest version of this topic can be found at COleCurrency Class.
Encapsulates the CURRENCY
data type of OLE automation.
Syntax
class COleCurrency
Members
Public Constructors
Name | Description |
---|---|
COleCurrency::COleCurrency | Constructs a COleCurrency object. |
Public Methods
Name | Description |
---|---|
COleCurrency::Format | Generates a formatted string representation of a COleCurrency object. |
COleCurrency::GetStatus | Gets the status (validity) of this COleCurrency object. |
COleCurrency::ParseCurrency | Reads a CURRENCY value from a string and sets the value of COleCurrency . |
COleCurrency::SetCurrency | Sets the value of this COleCurrency object. |
COleCurrency::SetStatus | Sets the status (validity) for this COleCurrency object. |
Public Operators
Name | Description |
---|---|
operator = | Copies a COleCurrency value. |
operator +, - | Adds, subtracts, and changes sign of COleCurrency values. |
operator +=, -= | Adds and subtracts a COleCurrency value from this COleCurrency object. |
operator */ | Scales a COleCurrency value by an integer value. |
operator *=, /= | Scales this COleCurrency value by an integer value. |
operator << | Outputs a COleCurrency value to CArchive or CDumpContext . |
operator >> | Inputs a COleCurrency object from CArchive . |
operator CURRENCY | Converts a COleCurrency value into a CURRENCY. |
operator ==, <, <=, etc. | Compares two COleCurrency values. |
Public Data Members
Name | Description |
---|---|
COleCurrency::m_cur | Contains the underlying CURRENCY for this COleCurrency object. |
COleCurrency::m_status | Contains the status of this COleCurrency object. |
Remarks
COleCurrency does not have a base class.
CURRENCY is implemented as an 8-byte, two's-complement integer value scaled by 10,000. This gives a fixed-point number with 15 digits to the left of the decimal point and 4 digits to the right. The CURRENCY data type is extremely useful for calculations involving money, or for any fixed-point calculation where accuracy is important. It is one of the possible types for the VARIANT
data type of OLE automation.
COleCurrency also implements some basic arithmetic operations for this fixed-point type. The supported operations have been selected to control the rounding errors which occur during fixed-point calculations.
Inheritance Hierarchy
COleCurrency
Requirements
Header: afxdisp.h
COleCurrency::COleCurrency
Constructs a COleCurrency object.
COleCurrency();
COleCurrency(CURRENCY cySrc);
COleCurrency(const COleCurrency& curSrc);
COleCurrency(const VARIANT& varSrc);
COleCurrency(
long nUnits,
long nFractionalUnits);
Parameters
cySrc
A CURRENCY value to be copied into the new COleCurrency object.
curSrc
An existing COleCurrency object to be copied into the new COleCurrency object.
varSrc
An existing VARIANT data structure (possibly a COleVariant
object) to be converted to a currency value ( VT_CY
) and copied into the new COleCurrency object.
nUnits
, nFractionalUnits
Indicate the units and fractional part (in 1/10,000's) of the value to be copied into the new COleCurrency object.
Remarks
All of these constructors create new COleCurrency objects initialized to the specified value. A brief description of each of these constructors follows. Unless otherwise noted, the status of the new COleCurrency item is set to valid.
COleCurrency(
 **)**   Constructs a COleCurrency object initialized to 0 (zero).COleCurrency(
ÂcySrc
 **)**   Constructs a COleCurrency object from a CURRENCY value.COleCurrency(
ÂcurSrc
 **)**   Constructs a COleCurrency object from an existing COleCurrency object. The new object has the same status as the source object.COleCurrency(
 varSrc **)**   Constructs a COleCurrency object. Attempts to convert a VARIANT structure orCOleVariant
object to a currency (VT_CY
) value. If this conversion is successful, the converted value is copied into the new COleCurrency object. If it is not, the value of the COleCurrency object is set to zero (0) and its status to invalid.COleCurrency(
ÂnUnits
,nFractionalUnits
 **)**   Constructs a COleCurrency object from the specified numerical components. If the absolute value of the fractional part is greater than 10,000, the appropriate adjustment is made to the units. Note that the units and fractional part are specified by signed long values.
For more information, see the CURRENCY and VARIANT entries in the Windows SDK.
Example
The following examples show the effects of the zero-parameter and two-parameter constructors:
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
Call this member function to create a formatted representation of the currency value.
CString Format( DWORD dwFlags = 0, LCID lcid = LANG_USER_DEFAULT Â) const;
Parameters
dwFlags
Indicates flags for locale settings. Only the following flag is relevant to currency:
- LOCALE_NOUSEROVERRIDEÂ Â Â Use the system default locale settings, rather than custom user settings.
lcid
Indicates locale ID to use for the conversion.
Return Value
A CString
that contains the formatted currency value.
Remarks
It formats the value using the local language specifications (locale IDs). A currency symbol is not included in the value returned. If the status of this COleCurrency object is null, the return value is an empty string. If the status is invalid, the return string is specified by the string resource IDS_INVALID_CURRENCY.
Example
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
Call this member function to get the status (validity) of a given COleCurrency object.
CurrencyStatus GetStatus() const;
Return Value
Returns the status of this COleCurrency value.
Remarks
The return value is defined by the CurrencyStatus
enumerated type that is defined within the COleCurrency class.
enum CurrencyStatus{
valid = 0,
invalid = 1,
null = 2,
};
For a brief description of these status values, see the following list:
COleCurrency::valid   Indicates that this COleCurrency object is valid.
COleCurrency::invalid   Indicates that this COleCurrency object is invalid; that is, its value may be incorrect.
COleCurrency::null   Indicates that this COleCurrency object is null, that is, that no value has been supplied for this object. (This is "null" in the database sense of "having no value," as opposed to the C++ NULL.)
The status of a COleCurrency object is invalid in the following cases:
If its value is set from a VARIANT or
COleVariant
value that could not be converted to a currency value.If this object has experienced an overflow or underflow during an arithmetic assignment operation, for example
+=
or *=.If an invalid value was assigned to this object.
If the status of this object was explicitly set to invalid using SetStatus.
For more information on operations that may set the status to invalid, see the following member functions:
COleCurrency
operator =
operator + -
operator += and -=
operator * /
operator *= and /=
Example
// 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
The underlying CURRENCY structure for this COleCurrency object.
Remarks
Warning
Changing the value in the CURRENCY structure accessed by the pointer returned by this function will change the value of this COleCurrency object. It does not change the status of this COleCurrency object.
For more information, see the CURRENCY entry in the Windows SDK.
COleCurrency::m_status
The type of this data member is the enumerated type CurrencyStatus
, which is defined within the COleCurrency class.
enum CurrencyStatus{
valid = 0,
invalid = 1,
null = 2,
};
Remarks
For a brief description of these status values, see the following list:
COleCurrency::valid   Indicates that this COleCurrency object is valid.
COleCurrency::invalid   Indicates that this COleCurrency object is invalid; that is, its value may be incorrect.
COleCurrency::null   Indicates that this COleCurrency object is null, that is, that no value has been supplied for this object. (This is "null" in the database sense of "having no value," as opposed to the C++ NULL.)
The status of a COleCurrency object is invalid in the following cases:
If its value is set from a VARIANT or
COleVariant
value that could not be converted to a currency value.If this object has experienced an overflow or underflow during an arithmetic assignment operation, for example
+=
or *=.If an invalid value was assigned to this object.
If the status of this object was explicitly set to invalid using SetStatus.
For more information on operations that may set the status to invalid, see the following member functions:
COleCurrency
operator =
operator +, -
operator +=, -=
operator */
operator *=, /=
Warning
This data member is for advanced programming situations. You should use the inline member functions GetStatus and SetStatus. See
SetStatus
for further cautions regarding explicitly setting this data member.
COleCurrency::operator =
These overloaded assignment operators copy the source currency value into this COleCurrency object.
const COleCurrency& operator=(CURRENCY cySrc);
const COleCurrency& operator=(const COleCurrency& curSrc);
const COleCurrency& operator=(const VARIANT& varSrc);
Remarks
A brief description of each operator follows:
operator =(
cySrc
**)**Â Â Â TheCURRENCY
value is copied into the COleCurrency object and its status is set to valid.operator =(
curSrc
**)**Â Â Â The value and status of the operand, an existing COleCurrency object are copied into this COleCurrency object.operator =( varSrc **)**Â Â Â If the conversion of the
VARIANT
value (or COleVariant object) to a currency (VT_CY
) is successful, the converted value is copied into this COleCurrency object and its status is set to valid. If the conversion is not successful, the value of the COleCurrency object is set to 0 and its status to invalid.
For more information, see the CURRENCY and VARIANT entries in the Windows SDK.
Example
// 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 +, -
These operators allow you to add and subtract two COleCurrency values to and from each other and to change the sign of a COleCurrency value.
COleCurrency operator+(const COleCurrency& cur) const;
COleCurrency operator-(const COleCurrency& cur) const;
COleCurrency operator-() const;
Remarks
If either of the operands is null, the status of the resulting COleCurrency value is null.
If the arithmetic operation overflows, the resulting COleCurrency value is invalid.
If the operand is invalid and the other is not null, the status of the resulting COleCurrency value is invalid.
For more information on the valid, invalid, and null status values, see the m_status member variable.
Example
// 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 +=, -=
Allow you to add and subtract a COleCurrency value to and from this COleCurrency object.
const COleCurrency& operator+=(const COleCurrency& cur);
const COleCurrency& operator-=(const COleCurrency& cur);
Remarks
If either of the operands is null, the status of this COleCurrency object is set to null.
If the arithmetic operation overflows, the status of this COleCurrency object is set to invalid.
If either of the operands is invalid and the other is not null, the status of this COleCurrency object is set to invalid.
For more information on the valid, invalid, and null status values, see the m_status member variable.
Example
// 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 * and /
Allow you to scale a COleCurrency value by an integral value.
COleCurrency operator*(long nOperand) const;
COleCurrency operator/(long nOperand) const;
Remarks
If the COleCurrency operand is null, the status of the resulting COleCurrency value is null.
If the arithmetic operation overflows or underflows, the status of the resulting COleCurrency value is invalid.
If the COleCurrency operand is invalid, the status of the resulting COleCurrency value is invalid.
For more information on the valid, invalid, and null status values, see the m_status member variable.
Example
// 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 *=, /=
Allow you to scale this COleCurrency value by an integral value.
const COleCurrency& operator*=(long nOperand);
const COleCurrency& operator/=(long nOperand);
Remarks
If the COleCurrency operand is null, the status of this COleCurrency object is set to null.
If the arithmetic operation overflows, the status of this COleCurrency object is set to invalid.
If the COleCurrency operand is invalid, the status of this COleCurrency object is set to invalid.
For more information on the valid, invalid, and null status values, see the m_status member variable.
Example
// 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));
COleCurrency::operator <<, >>
Supports diagnostic dumping and storing to an archive.
friend CDumpContext& operator<<(
CDumpContext& dc,
COleCurrency curSrc);
friend CArchive& operator<<(
CArchive& ar,
COleCurrency curSrc);
friend CArchive& operator>>(
CArchive& ar,
COleCurrency& curSrc);
Remarks
The extraction ( >>) operator supports loading from an archive.
COleCurrency::operator CURRENCY
Returns a CURRENCY
structure whose value is copied from this COleCurrency object.
operator CURRENCY() const;
Remarks
COleCurrency::ParseCurrency
Call this member function to parse a string to read a currency value.
BOOL ParseCurrency(
LPCTSTR lpszCurrency,
DWORD dwFlags = 0,
LCID lcid = LANG_USER_DEFAULT);
throw(CMemoryException*);
throw(COleException*);
Parameters
lpszCurrency
A pointer to the null-terminated string which is to be parsed.
dwFlags
Indicates flags for locale settings, possibly the following flag:
- LOCALE_NOUSEROVERRIDEÂ Â Â Use the system default locale settings, rather than custom user settings.
lcid
Indicates locale ID to use for the conversion.
Return Value
Nonzero if the string was successfully converted to a currency value, otherwise 0.
Remarks
It uses local language specifications (locale IDs) for the meaning of nonnumeric characters in the source string.
For a discussion of locale ID values, see Supporting Multiple Languages.
If the string was successfully converted to a currency value, the value of this COleCurrency object is set to that value and its status to valid.
If the string could not be converted to a currency value or if there was a numerical overflow, the status of this COleCurrency object is invalid.
If the string conversion failed due to memory allocation errors, this function throws a CMemoryException. In any other error state, this function throws a COleException.
Example
// works if default locale has dot decimal point
COleCurrency cur;
cur.ParseCurrency(_T("$135.95"), 0);
ASSERT(cur == COleCurrency(135, 9500));
COleCurrency Relational Operators
Compare two currency values and return nonzero if the condition is true; otherwise 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;
Remarks
Note
The return value of the ordering operations ( <, <=, >, >=) is undefined if the status of either operand is null or invalid. The equality operators ( ==
, !=
) consider the status of the operands.
Example
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
Call this member function to set the units and fractional part of this COleCurrency object.
void SetCurrency(
long nUnits,
long nFractionalUnits);
Parameters
nUnits
, nFractionalUnits
Indicate the units and fractional part (in 1/10,000's) of the value to be copied into this COleCurrency object.
Remarks
If the absolute value of the fractional part is greater than 10,000, the appropriate adjustment is made to the units, as shown in the third of the following examples.
Note that the units and fractional part are specified by signed long values. The fourth of the following examples shows what happens when the parameters have different signs.
Example
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
Call this member function to set the status (validity) of this COleCurrency object.
void SetStatus(Â CurrencyStatus status Â);
Parameters
status
The new status for this COleCurrency object.
Remarks
The status parameter value is defined by the CurrencyStatus
enumerated type, which is defined within the COleCurrency class.
enum CurrencyStatus{
valid = 0,
invalid = 1,
null = 2,
};
For a brief description of these status values, see the following list:
COleCurrency::valid   Indicates that this COleCurrency object is valid.
COleCurrency::invalid   Indicates that this COleCurrency object is invalid; that is, its value may be incorrect.
COleCurrency::null   Indicates that this COleCurrency object is null, that is, that no value has been supplied for this object. (This is "null" in the database sense of "having no value," as opposed to the C++ NULL.)
Warning
This function is for advanced programming situations. This function does not alter the data in this object. It will most often be used to set the status to null or invalid. Note that the assignment operator ( operator =) and SetCurrency do set the status to of the object based on the source value(s).