Compartir a través de


Clase COleCurrency

Encapsula el tipo de datos CURRENCY de la automatización OLE.

Sintaxis

class COleCurrency

Miembros

Constructores públicos

Nombre Descripción
COleCurrency::COleCurrency Construye un objeto COleCurrency.

Métodos públicos

Nombre Descripción
COleCurrency::Format Genera una representación de cadena con formato de un objeto COleCurrency.
COleCurrency::GetStatus Obtiene el estado (validez) de este objeto COleCurrency.
COleCurrency::ParseCurrency Lee un valor de CURRENCY de una cadena y establece el valor de COleCurrency.
COleCurrency::SetCurrency Establece el valor de este objeto COleCurrency.
COleCurrency::SetStatus Establece el estado (validez) de este objeto COleCurrency.

Operadores públicos

Nombre Descripción
operator = Copia un valor COleCurrency.
operador +, - Agrega, resta y cambia el signo de valores COleCurrency.
operador +=, -= Agregue y reste un valor COleCurrency de este objeto COleCurrency.
operador */ Escala un valor COleCurrency por un valor entero.
operador *=, /= Escala un valor COleCurrency por un valor entero.
operador << Genera un valor COleCurrency en CArchive o en CDumpContext.
operador >> Introduce un objeto COleCurrency de CArchive.
operador CURRENCY Convierte un valor COleCurrency en una estructura CURRENCY.
operador ==, <, <=, etc. Compara dos valores COleCurrency.

Miembros de datos públicos

Nombre Descripción
COleCurrency::m_cur Contiene la estructura CURRENCY subyacente para este objeto COleCurrency.
COleCurrency::m_status Contiene el estado de este objeto COleCurrency.

Comentarios

COleCurrency no tiene una clase base.

CURRENCY se implementa como un valor entero, de 8 bytes y de dos complementos, escalado por 10 000. Esto proporciona un número de punto fijo con 15 dígitos a la izquierda del separador decimal y cuatro dígitos a la derecha. El tipo de datos CURRENCY es muy útil para cálculos monetarios o para cualquier cálculo de punto fijo en el que la precisión sea importante. Es uno de los tipos posibles para el tipo de datos VARIANT de la automatización de OLE.

COleCurrency también implementa algunas operaciones aritméticas básicas para este tipo de punto fijo. Las operaciones compatibles se han seleccionado para controlar los errores de redondeo que se producen durante los cálculos de punto fijo.

Jerarquía de herencia

COleCurrency

Requisitos

Encabezado: afxdisp.h

COleCurrency::COleCurrency

Construye un objeto COleCurrency.

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

COleCurrency(
    long nUnits,
    long nFractionalUnits);

Parámetros

cySrc
Un valor CURRENCY que se va a copiar en el nuevo objeto COleCurrency.

curSrc
Un objeto COleCurrency existente que se va a copiar en el nuevo objeto COleCurrency.

varSrc
Una estructura de datos VARIANT existente (posiblemente un objeto COleVariant) que se va a convertir en un valor de divisa [currency] (VT_CY) y se va a copiar en el nuevo objeto COleCurrency.

nUnits, nFractionalUnits Indique las unidades y la parte fraccionaria (en 1/10 000) del valor que se va a copiar en el nuevo objeto COleCurrency.

Comentarios

Todos estos constructores crean objetos COleCurrency nuevos e inicializados en el valor especificado. A continuación, se muestra una breve descripción de cada uno de estos constructores. A menos que se indique lo contrario, el estado del nuevo elemento COleCurrency se establece en válido.

  • COleCurrency() Construye un objeto COleCurrency inicializado en 0 (cero).

  • COleCurrency(cySrc) Construye un objeto COleCurrency a partir de un valor CURRENCY.

  • COleCurrency(curSrc) Construye un objeto COleCurrency a partir de un objeto COleCurrency existente. El objeto nuevo tiene el mismo estado que el objeto de origen.

  • COleCurrency(varSrc) Construye un objeto COleCurrency. Intenta convertir una estructura VARIANT o un objeto COleVariant en un valor de divisa (VT_CY). Si esta conversión se realiza correctamente, el valor convertido se copia en el objeto COleCurrency nuevo. Si no es así, el valor del objeto COleCurrency se establece en cero (0) y su estado en no válido.

  • COleCurrency(nUnits, nFractionalUnits) Construye un objeto COleCurrency a partir de los componentes numéricos especificados. Si el valor absoluto de la parte fraccionaria es mayor que 10 000, se realiza el ajuste adecuado en las unidades. Tenga en cuenta que las unidades y la parte fraccionaria se especifican mediante valores “signed long”.

Para más información, consulte las entradas CURRENCY y VARIANT en Windows SDK.

Ejemplo

En los ejemplos siguientes se muestran los efectos de los constructores de cero y de dos parámetros:

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

Llame a esta función miembro para crear una representación con formato del valor de divisa.

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

Parámetros

dwFlags
Indica marcas para la configuración regional. Solo esta marca es relevante para la divisa:

  • LOCALE_NOUSEROVERRIDE Use la configuración regional predeterminada del sistema, en vez de la configuración personalizada por el usuario.

lcid
Indica el id. de configuración regional que se va a usar para la conversión.

Valor devuelto

Un valor CString que contiene el valor de divisa con formato.

Comentarios

Da formato al valor mediante las especificaciones de idioma local (Ids. de configuración regional). No se incluye un símbolo de divisa en el valor devuelto. Si el estado de este objeto COleCurrency es null, el valor devuelto es una cadena vacía. Si el estado es no válido, el recurso de cadena IDS_INVALID_CURRENCY especifica la cadena de devolución.

Ejemplo

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

Llame a esta función miembro para obtener el estado (validez) de un objeto COleCurrency determinado.

CurrencyStatus GetStatus() const;

Valor devuelto

Devuelve el estado de este valor COleCurrency.

Comentarios

El valor devuelto se define mediante el tipo enumerado CurrencyStatus, que se define dentro de la clase COleCurrency.

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

Para una breve descripción de estos valores de estado, consulte la lista siguiente:

  • COleCurrency::valid indica que este objeto COleCurrency es válido.

  • COleCurrency::invalid Indica que este objeto COleCurrency es no válido; es decir, su valor puede que sea incorrecto.

  • COleCurrency::null Indica que este objeto COleCurrency es null, es decir, que no se ha proporcionado ningún valor para este objeto. (Esto es "null" en el sentido de la base de datos de "no tener ningún valor", al contrario que el NULL de C++).

El estado de un objeto COleCurrency es no válido en los casos siguientes:

  • Si su valor se establece a partir de un valor VARIANT o COleVariant que no se pudo convertir en un valor de divisa.

  • Si este objeto ha experimentado un desbordamiento o subdesbordamiento durante una operación de asignación aritmética, por ejemplo, += o *=.

  • Si se asignó un valor no válido a este objeto.

  • Si el estado de este objeto se estableció explícitamente en no válido mediante SetStatus.

Para más información sobre las operaciones que pueden establecer el estado en no válido, consulte las siguientes funciones miembro:

Ejemplo

// 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

La estructura CURRENCY subyacente de este objeto COleCurrency.

Comentarios

Precaución

Cambiar el valor de la estructura CURRENCY, a la que accede el puntero devuelto por esta función, cambiará el valor de este objeto COleCurrency. No cambia el estado de este objeto COleCurrency.

Para más información, consulte la entrada CURRENCY en Windows SDK.

COleCurrency::m_status

El tipo de este miembro de datos es el tipo enumerado CurrencyStatus, que se define dentro de la clase COleCurrency.

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

Comentarios

Para una breve descripción de estos valores de estado, consulte la lista siguiente:

  • COleCurrency::valid indica que este objeto COleCurrency es válido.

  • COleCurrency::invalid Indica que este objeto COleCurrency es no válido; es decir, su valor puede que sea incorrecto.

  • COleCurrency::null Indica que este objeto COleCurrency es null, es decir, que no se ha proporcionado ningún valor para este objeto. (Esto es "null" en el sentido de la base de datos de "no tener ningún valor", al contrario que el NULL de C++).

El estado de un objeto COleCurrency es no válido en los casos siguientes:

  • Si su valor se establece a partir de un valor VARIANT o COleVariant que no se pudo convertir en un valor de divisa.

  • Si este objeto ha experimentado un desbordamiento o subdesbordamiento durante una operación de asignación aritmética, por ejemplo, += o *=.

  • Si se asignó un valor no válido a este objeto.

  • Si el estado de este objeto se estableció explícitamente en no válido mediante SetStatus.

Para más información sobre las operaciones que pueden establecer el estado en no válido, consulte las siguientes funciones miembro:

Precaución

Este miembro de datos es para situaciones de programación avanzadas. Debe usar las funciones miembro insertadas GetStatus y SetStatus. Consulte SetStatus para obtener más precauciones sobre cómo establecer explícitamente este miembro de datos.

COleCurrency::operator =

Estos operadores de asignación sobrecargados copian el valor de divisa de origen en este objeto COleCurrency.

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

Comentarios

A continuación, se muestra una breve descripción de cada operador:

  • operator =(cySrc) El valor CURRENCY se copia en el objeto COleCurrency y su estado se establece en válido.

  • operator =(curSrc) El valor y el estado del operando, un objeto COleCurrency existente, se copian en este objeto COleCurrency.

  • operator =(varSrc) Si la conversión del valor VARIANT (o del objeto COleVariant) a uno de divisa ( VT_CY) se realiza correctamente, el valor convertido se copia en este objeto COleCurrency y su estado se establece en válido. Si la conversión no se realiza correctamente, el valor del objeto COleCurrency se establece en 0 y su estado en no válido.

Para más información, consulte las entradas CURRENCY y VARIANT en Windows SDK.

Ejemplo

// 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 +, -

Estos operadores permiten agregar y restar dos valores COleCurrency entre sí y cambiar el signo de un valor COleCurrency.

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

Comentarios

Si alguno de los operandos es null, el estado del valor COleCurrency resultante es null.

Si la operación aritmética se desborda, el valor resultante COleCurrency es no válido.

Si el operando es no válido y el otro no es null, el estado del valor COleCurrency resultante es no válido.

Para obtener más información sobre los valores de estado válidos, no válidos y null, consulte la variable de miembro m_status.

Ejemplo

// 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 +=, -=

Permite agregar y restar un valor COleCurrency a este objeto COleCurrency.

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

Comentarios

Si alguno de los operandos es null, el estado de este objeto COleCurrency se establece en null.

Si la operación aritmética se desborda, el estado de este objeto COleCurrency se establece en no válido.

Si alguno de los operandos es no válido y el otro no es null, el estado de este objeto COleCurrency se establece en no válido.

Para obtener más información sobre los valores de estado válidos, no válidos y null, consulte la variable de miembro m_status.

Ejemplo

// 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 * y /

Permite escalar un valor COleCurrency por un valor integral.

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

Comentarios

Si el operando COleCurrency es null, el estado del valor COleCurrency resultante es null.

Si la operación aritmética se desborda o se subdesborda, el estado del valor COleCurrency resultante es no válido.

Si el operando COleCurrency es no válido, el estado del valor COleCurrency resultante es no válido.

Para obtener más información sobre los valores de estado válidos, no válidos y null, consulte la variable de miembro m_status.

Ejemplo

// 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 *=, /=

Permite escalar este valor COleCurrency por un valor integral.

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

Comentarios

Si el operando COleCurrency es null, el estado de este objeto COleCurrency se establece en null.

Si la operación aritmética se desborda, el estado de este objeto COleCurrency se establece en no válido.

Si el operando COleCurrency es no válido, el estado de este objeto COleCurrency se establece en no válido.

Para obtener más información sobre los valores de estado válidos, no válidos y null, consulte la variable de miembro m_status.

Ejemplo

// 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 >>

Admite el volcado de diagnóstico y el almacenamiento en un archivo.

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

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

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

Comentarios

El operador de extracción ( >>) admite la carga desde un archivo.

COleCurrency::operator CURRENCY

Devuelve una estructura CURRENCY cuyo valor se copia de este objeto COleCurrency.

operator CURRENCY() const;

Comentarios

COleCurrency::ParseCurrency

Llame a esta función miembro para analizar una cadena y así leer un valor de divisa.

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

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

Parámetros

lpszCurrency
Puntero a la cadena terminada en null que se va a analizar.

dwFlags
Indica marcas para la configuración regional, posiblemente la siguiente marca:

  • LOCALE_NOUSEROVERRIDE Use la configuración regional predeterminada del sistema, en vez de la configuración personalizada por el usuario.

lcid
Indica el id. de configuración regional que se va a usar para la conversión.

Valor devuelto

Distinto de cero si la cadena se convirtió correctamente en un valor de divisa; de lo contrario, 0.

Comentarios

Usa especificaciones de idioma local (Ids. de configuración regional) para el significado de caracteres no numéricos en la cadena de origen.

Para obtener una explicación de los valores de Id. de configuración regional, consulte Compatibilidad con varios idiomas.

Si la cadena se convirtió correctamente en un valor de divisa, el valor de este objeto COleCurrency se establece en ese valor y su estado en válido.

Si la cadena no se pudo convertir en un valor de divisa o si se produjo un desbordamiento numérico, el estado de este objeto COleCurrency es no válido.

Si se produjo un error en la conversión de cadenas debido a errores de asignación de memoria, esta función produce una excepción CMemoryException. En cualquier otro estado de error, esta función produce una excepción COleException.

Ejemplo

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

Operadores relacionales de COleCurrency

Compara dos valores de divisa y devuelve un valor distinto de cero si la condición es true; de lo contrario, devuelve 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;

Comentarios

Nota:

El valor devuelto de las operaciones de ordenación ( <, <=, >, >=) no está definido si el estado de cualquiera de los operandos es null o no válido. Los operadores de igualdad ( ==, !=) consideran el estado de los operandos.

Ejemplo

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

Llame a esta función miembro para establecer las unidades y la parte fraccionaria de este objeto COleCurrency.

void SetCurrency(
    long nUnits,
    long nFractionalUnits);

Parámetros

nUnits, nFractionalUnits Indica las unidades y la parte fraccionaria (en 1/10 000) del valor que se va a copiar en este objeto COleCurrency.

Comentarios

Si el valor absoluto de la parte fraccionaria es mayor que 10 000, el ajuste adecuado se realiza en las unidades, como se muestra en el tercero de los ejemplos siguientes.

Tenga en cuenta que las unidades y la parte fraccionaria se especifican mediante valores “signed long”. En el cuarto de los ejemplos siguientes se muestra lo que sucede cuando los parámetros tienen signos diferentes.

Ejemplo

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

Llame a esta función miembro para establecer el estado (validez) de este objeto COleCurrency.

void SetStatus(CurrencyStatus  status  );

Parámetros

status
El nuevo estado de este objeto COleCurrency.

Comentarios

El valor de parámetro de estado se define mediante el tipo enumerado CurrencyStatus, que se define dentro de la clase COleCurrency.

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

Para una breve descripción de estos valores de estado, consulte la lista siguiente:

  • COleCurrency::valid indica que este objeto COleCurrency es válido.

  • COleCurrency::invalid Indica que este objeto COleCurrency es no válido; es decir, su valor puede que sea incorrecto.

  • COleCurrency::null Indica que este objeto COleCurrency es null, es decir, que no se ha proporcionado ningún valor para este objeto. (Esto es "null" en el sentido de la base de datos de "no tener ningún valor", al contrario que el NULL de C++).

Precaución

Esta función es para situaciones de programación avanzadas. Esta función no modifica los datos de este objeto. Se usará con más frecuencia para establecer el estado en null o no válido. Tenga en cuenta que el operador de asignación ( operator =) y SetCurrency establecen el estado del objeto en función del valor o valores de origen.

Consulte también

Gráfico de jerarquías
COleVariant (clase)