Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
CComCurrency has methods and operators for creating and managing a CURRENCY object.
Syntax
class CComCurrency;
Members
Public constructors
| Name | Description | 
|---|---|
| CComCurrency::CComCurrency | The constructor for a CComCurrencyobject. | 
Public methods
| Name | Description | 
|---|---|
| CComCurrency::GetCurrencyPtr | Returns the address of an m_currencydata member. | 
| CComCurrency::GetFraction | Call this method to return the fractional component of a CComCurrencyobject. | 
| CComCurrency::GetInteger | Call this method to return the integer component of a CComCurrencyobject. | 
| CComCurrency::Round | Call this method to round a CComCurrencyobject to the nearest integer value. | 
| CComCurrency::SetFraction | Call this method to set the fractional component of a CComCurrencyobject. | 
| CComCurrency::SetInteger | Call this method to set the integer component of a CComCurrencyobject. | 
Public operators
| Name | Description | 
|---|---|
| CComCurrency::operator - | This operator is used to perform subtraction on a CComCurrencyobject. | 
| CComCurrency::operator != | Compares two CComCurrencyobjects for inequality. | 
| CComCurrency::operator * | This operator is used to perform multiplication on a CComCurrencyobject. | 
| CComCurrency::operator *= | This operator is used to perform multiplication on a CComCurrencyobject and assign it the result. | 
| CComCurrency::operator / | This operator is used to perform division on a CComCurrencyobject. | 
| CComCurrency::operator /= | This operator is used to perform division on a CComCurrencyobject and assign it the result. | 
| CComCurrency::operator + | This operator is used to perform addition on a CComCurrencyobject. | 
| CComCurrency::operator += | This operator is used to perform addition on a CComCurrencyobject and assign the result to the current object. | 
| CComCurrency::operator < | This operator compares two CComCurrencyobjects to determine the lesser. | 
| CComCurrency::operator <= | This operator compares two CComCurrencyobjects to determine equality or the lesser. | 
| CComCurrency::operator = | This operator assigns the CComCurrencyobject to a new value. | 
| CComCurrency::operator -= | This operator is used to perform subtraction on a CComCurrencyobject and assign it the result. | 
| CComCurrency::operator == | This operator compares two CComCurrencyobjects for equality. | 
| CComCurrency::operator > | This operator compares two CComCurrencyobjects to determine the larger. | 
| CComCurrency::operator >= | This operator compares two CComCurrencyobjects to determine equality or the larger. | 
| CComCurrency::operator CURRENCY | Casts a CURRENCYobject. | 
Public data members
| Name | Description | 
|---|---|
| CComCurrency::m_currency | The CURRENCYvariable created by your class instance. | 
Remarks
CComCurrency is a wrapper for the CURRENCY data type. CURRENCY is implemented as an 8-byte two's-complement integer value scaled by 10,000. This scaling gives a fixed-point number with 15 digits left of the decimal point and 4 digits to the right. The CURRENCY data type is useful for calculations involving money, or for any fixed-point calculations where accuracy is important.
The CComCurrency wrapper implements arithmetic, assignment, and comparison operations for this fixed-point type. The supported applications have been selected to control the rounding errors that can occur during fixed-point calculations.
The CComCurrency object provides access to the numbers on either side of the decimal point in the form of two components: an integer component, which stores the value to the left of the decimal point, and a fractional component, which stores the value to the right of the decimal point. The fractional component is stored internally as an integer value between -9999 (CY_MIN_FRACTION) and +9999 (CY_MAX_FRACTION). The method CComCurrency::GetFraction returns a value scaled by a factor of 10000 (CY_SCALE).
When specifying the integer and fractional components of a CComCurrency object, remember that the fractional component is a number in the range 0 to 9999. This consideration is important when dealing with a currency such as the US dollar. Dollar amounts are commonly expressed using only two significant digits after the decimal point. Even though the last two digits aren't displayed, they must be taken into account.
| Value | Possible CComCurrency assignments | 
|---|---|
| $10.50 | CComCurrency(10,5000)orCComCurrency(10.50) | 
| $10.05 | CComCurrency(10,500)orCComCurrency(10.05) | 
The values CY_MIN_FRACTION, CY_MAX_FRACTION, and CY_SCALE are defined in atlcur.h.
Requirements
Header: atlcur.h
 CComCurrency::CComCurrency
The constructor.
CComCurrency() throw();
CComCurrency(const CComCurrency& curSrc) throw();
CComCurrency(CURRENCY cySrc) throw();
CComCurrency(DECIMAL dSrc);
CComCurrency(ULONG ulSrc);
CComCurrency(USHORT usSrc);
CComCurrency(CHAR cSrc);
CComCurrency(DOUBLE dSrc);
CComCurrency(FLOAT fSrc);
CComCurrency(LONG lSrc);
CComCurrency(SHORT sSrc);
CComCurrency(BYTE bSrc);
CComCurrency(LONGLONG nInteger, SHORT nFraction);
explicit CComCurrency(LPDISPATCH pDispSrc);
explicit CComCurrency(const VARIANT& varSrc);
explicit CComCurrency(LPCWSTR szSrc);
explicit CComCurrency(LPCSTR szSrc);
Parameters
curSrc
An existing CComCurrency object.
cySrc
A variable of type CURRENCY.
bSrc, dSrc, fSrc, lSrc, sSrc, ulSrc, usSrc
The initial value given to the member variable m_currency.
cSrc
A character containing the initial value given to the member variable m_currency.
nInteger, nFraction
The initial monetary value's integer and fractional components. For more information, see the CComCurrency overview.
pDispSrc
An IDispatch pointer.
varSrc
A variable of type VARIANT. The locale of the current thread is used to perform the conversion.
szSrc
A Unicode or ANSI string containing the initial value. The locale of the current thread is used to perform the conversion.
Remarks
The constructor sets the initial value of CComCurrency::m_currency, and accepts a wide range of data types, including integers, strings, floating-point numbers, CURRENCY variables, and other CComCurrency objects. If no value is provided, m_currency is set to 0.
If there's an error, such as an overflow, the constructors lacking an empty exception specification (throw()) call AtlThrow with an HRESULT describing the error.
When using floating-point or double values to assign a value, remember that CComCurrency(10.50) is equivalent to CComCurrency(10,5000), and not CComCurrency(10,50).
 CComCurrency::GetCurrencyPtr
Returns the address of an m_currency data member.
CURRENCY* GetCurrencyPtr() throw();
Return value
Returns the address of an m_currency data member
 CComCurrency::GetFraction
Call this method to return the fractional component of the CComCurrency object.
SHORT GetFraction() const;
Return value
Returns the fractional component of the m_currency data member.
Remarks
The fractional component is a 4-digit integer value between -9999 (CY_MIN_FRACTION) and +9999 (CY_MAX_FRACTION). GetFraction returns this value scaled by 10000 (CY_SCALE). The values of CY_MIN_FRACTION, CY_MAX_FRACTION, and CY_SCALE are defined in atlcur.h.
Example
CComCurrency cur(10, 5000);
int nFract;
nFract = cur.GetFraction();
ATLASSERT(nFract == 5000);   
 CComCurrency::GetInteger
Call this method to get the integer component of a CComCurrency object.
LONGLONG GetInteger() const;
Return value
Returns the integer component of the m_currency data member.
Example
CComCurrency cur(10, 5000);
LONGLONG nInteger;
nInteger = cur.GetInteger();
ATLASSERT(nInteger == 10);   
 CComCurrency::m_currency
The CURRENCY data member.
CURRENCY m_currency;
Remarks
This member holds the currency accessed and manipulated by the methods of this class.
 CComCurrency::operator -
This operator is used to perform subtraction on a CComCurrency object.
CComCurrency operator-() const;
CComCurrency operator-(const CComCurrency& cur) const;
Parameters
cur
A CComCurrency object.
Return value
Returns a CComCurrency object representing the result of the subtraction. If there's an error, such as an overflow, this operator calls AtlThrow with an HRESULT describing the error.
Example
CComCurrency cur1(10, 5000), cur2;
cur2 = cur1 - CComCurrency(4, 5000);
ATLASSERT(cur2 == CComCurrency(6, 0));   
 CComCurrency::operator !=
This operator compares two objects for inequality.
bool operator!= (const CComCurrency& cur) const;
Parameters
cur
The CComCurrency object to be compared.
Return value
Returns TRUE if the item being compared isn't equal to the CComCurrency object; otherwise, FALSE.
Example
CComCurrency cur1(10, 5000), cur2(10, 5001);
ATLASSERT(cur1 != cur2);   
 CComCurrency::operator *
This operator is used to perform multiplication on a CComCurrency object.
CComCurrency operator*(long nOperand) const;
CComCurrency operator*(const CComCurrency& cur) const;
Parameters
nOperand
The multiplier.
cur
The CComCurrency object used as the multiplier.
Return value
Returns a CComCurrency object representing the result of the multiplication. If there's an error, such as an overflow, this operator calls AtlThrow with an HRESULT describing the error.
Example
CComCurrency cur1(10, 5000), cur2;
cur2 = cur1 * 2;
ATLASSERT(cur2 == CComCurrency(21, 0));   
 CComCurrency::operator *=
This operator is used to perform multiplication on a CComCurrency object and assign it the result.
const CComCurrency& operator*= (long nOperand);
const CComCurrency& operator*= (const CComCurrency& cur);
Parameters
nOperand
The multiplier.
cur
The CComCurrency object used as the multiplier.
Return value
Returns the updated CComCurrency object. If there's an error, such as an overflow, this operator calls AtlThrow with an HRESULT describing the error.
Example
CComCurrency cur(10, 5000);
cur *= 2;
ATLASSERT(cur == CComCurrency(21, 0));   
 CComCurrency::operator /
This operator is used to perform division on a CComCurrency object.
CComCurrency operator/(long nOperand) const;
Parameters
nOperand
The divisor.
Return value
Returns a CComCurrency object representing the result of the division. If the divisor is 0, an assert failure will occur.
Example
CComCurrency cur1(10, 5000), cur2;
cur2 = cur1 / 10;
ATLASSERT(cur2 == CComCurrency(1, 500));
 CComCurrency::operator /=
This operator is used to perform division on a CComCurrency object and assign it the result.
const CComCurrency& operator/= (long nOperand);
Parameters
nOperand
The divisor.
Return value
Returns the updated CComCurrency object. If the divisor is 0, an assert failure will occur.
Example
CComCurrency cur(10, 5000);
cur /= 10;
ATLASSERT(cur == CComCurrency(1, 500));
 CComCurrency::operator +
This operator is used to perform addition on a CComCurrency object.
CComCurrency operator+(const CComCurrency& cur) const;
Parameters
cur
The CComCurrency object to be added to the original object.
Return value
Returns a CComCurrency object representing the result of the addition. If there's an error, such as an overflow, this operator calls AtlThrow with an HRESULT describing the error.
Example
CComCurrency cur1(10, 5000), cur2;
cur2 = cur1 + CComCurrency(4, 5000);
ATLASSERT(cur2 == CComCurrency(15, 0));
 CComCurrency::operator +=
This operator is used to perform addition on a CComCurrency object and assign the result to the current object.
const CComCurrency& operator+= (const CComCurrency& cur);
Parameters
cur
The CComCurrency object.
Return value
Returns the updated CComCurrency object. If there's an error, such as an overflow, this operator calls AtlThrow with an HRESULT describing the error.
Example
CComCurrency cur(10, 2500);
cur += CComCurrency(4, 2500);
ATLASSERT(cur == CComCurrency(14, 5000));
 CComCurrency::operator <
This operator compares two CComCurrency objects to determine the lesser.
bool operator<(const CComCurrency& cur) const;
Parameters
cur
A CComCurrency object.
Return value
Returns TRUE if the first object is less than the second, FALSE otherwise.
Example
CComCurrency cur1(10, 4900);
CComCurrency cur2(10, 5000);
ATLASSERT(cur1 < cur2);
 CComCurrency::operator <=
This operator compares two CComCurrency objects to determine equality or the lesser.
bool operator<= (const CComCurrency& cur) const;
Parameters
cur
A CComCurrency object.
Return value
Returns TRUE if the first object is less than or equal to the second, FALSE otherwise.
Example
CComCurrency cur1(10, 4900);
CComCurrency cur2(10, 5000);
ATLASSERT(cur1 <= cur2);
 CComCurrency::operator =
This operator assigns the CComCurrency object to a new value.
const CComCurrency& operator= (const CComCurrency& curSrc) throw();
const CComCurrency& operator= (CURRENCY cySrc) throw();
const CComCurrency& operator= (FLOAT fSrc);
const CComCurrency& operator= (SHORT sSrc);
const CComCurrency& operator= (LONG lSrc);
const CComCurrency& operator= (BYTE bSrc);
const CComCurrency& operator= (USHORT usSrc);
const CComCurrency& operator= (DOUBLE dSrc);
const CComCurrency& operator= (CHAR cSrc);
const CComCurrency& operator= (ULONG ulSrc);
const CComCurrency& operator= (DECIMAL dSrc);
Parameters
curSrc
A CComCurrency object.
cySrc
A variable of type CURRENCY.
sSrc, fSrc, lSrc, bSrc, usSrc, dSrc, cSrc, ulSrc, dSrc
The numeric value to assign to the CComCurrency object.
Return value
Returns the updated CComCurrency object. If there's an error, such as an overflow, this operator calls AtlThrow with an HRESULT describing the error.
Example
CComCurrency cur1, cur2(10, 5000);
CURRENCY cy;
// Copying one object to another 
cur1 = cur2;
// Using the CURRENCY data type
cy.int64 = 105000;
cur1 = cy;
ATLASSERT(cur1 == cur2);
 CComCurrency::operator -=
This operator is used to perform subtraction on a CComCurrency object and assign it the result.
const CComCurrency& operator-= (const CComCurrency& cur);
Parameters
cur
A CComCurrency object.
Return value
Returns the updated CComCurrency object. If there's an error, such as an overflow, this operator calls AtlThrow with an HRESULT describing the error.
Example
CComCurrency cur(10, 5000);
cur -= CComCurrency(4, 5000);
ATLASSERT(cur == CComCurrency(6, 0));
 CComCurrency::operator ==
This operator compares two CComCurrency objects for equality.
bool operator== (const CComCurrency& cur) const;
Parameters
cur
The CComCurrency object to compare.
Return value
Returns TRUE if the objects are equal (that is, the m_currency data members, both integer and fractional, in both objects have the same value), FALSE otherwise.
Example
CComCurrency cur1(10, 5000), cur2;
cur2 = cur1;
ATLASSERT(cur1 == cur2);
 CComCurrency::operator >
This operator compares two CComCurrency objects to determine the larger.
bool operator>(const CComCurrency& cur) const;
Parameters
cur
A CComCurrency object.
Return value
Returns TRUE if the first object is greater than the second, FALSE otherwise.
Example
CComCurrency cur1(10, 5100);
CComCurrency cur2(10, 5000);
ATLASSERT(cur1 > cur2);
 CComCurrency::operator >=
This operator compares two CComCurrency objects to determine equality or the larger.
bool operator>= (const CComCurrency& cur) const;
Parameters
cur
A CComCurrency object.
Return value
Returns TRUE if the first object is greater than or equal to the second, FALSE otherwise.
Example
CComCurrency cur1(10, 5100);
CComCurrency cur2(10, 5000);
ATLASSERT(cur1 >= cur2);
 CComCurrency::operator CURRENCY
These operators are used to cast a CComCurrency object to a CURRENCY data type.
operator CURRENCY&() throw();
operator const CURRENCY&() const throw();
Return value
Returns a reference to a CURRENCY object.
Example
CComCurrency cur(10, 5000);
CURRENCY cy = static_cast<CURRENCY>(cur); // Note that explicit cast is not necessary
ATLASSERT(cy.int64 == 105000);
 CComCurrency::Round
Call this method to round the currency to a specified number of decimal places.
HRESULT Round(int nDecimals);
Parameters
nDecimals
The number of digits to which m_currency will be rounded, in the range 0 to 4.
Return value
Returns S_OK on success, or an error HRESULT on failure.
Example
CComCurrency cur(10, 1234);
cur.Round(3);
ATLASSERT(cur.GetFraction() == 1230);   
 CComCurrency::SetFraction
Call this method to set the fractional component of a CComCurrency object.
HRESULT SetFraction(SHORT nFraction);
Parameters
nFraction
The value to assign to the fractional component of the m_currency data member. The sign of the fractional component must be the same as the integer component, and the value must be in the range -9999 (CY_MIN_FRACTION) to +9999 (CY_MAX_FRACTION).
Return value
Returns S_OK on success, or an error HRESULT on failure.
Example
CComCurrency cur(10, 0);
cur.SetFraction(5000);
ATLASSERT(CComCurrency(10, 5000) == cur);   
 CComCurrency::SetInteger
Call this method to set the integer component of a CComCurrency object.
HRESULT SetInteger(LONGLONG nInteger);
Parameters
nInteger
The value to be assigned to the integer component of the m_currency data member. The sign of the integer component must match the sign of the existing fractional component.
nInteger must be in the range CY_MIN_INTEGER to CY_MAX_INTEGER, inclusive. These values are defined in atlcur.h.
Return value
Returns S_OK on success, or an error HRESULT on failure.
Example
CComCurrency cur(0, 5000);
cur.SetInteger(10);
ATLASSERT(CComCurrency(10, 5000) == cur);