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 objetoCOleCurrency
a partir de un valor CURRENCY.COleCurrency(
curSrc
) Construye un objetoCOleCurrency
a partir de un objetoCOleCurrency
existente. El objeto nuevo tiene el mismo estado que el objeto de origen.COleCurrency(
varSrc
) Construye un objetoCOleCurrency
. Intenta convertir una estructura VARIANT o un objetoCOleVariant
en un valor de divisa (VT_CY). Si esta conversión se realiza correctamente, el valor convertido se copia en el objetoCOleCurrency
nuevo. Si no es así, el valor del objetoCOleCurrency
se establece en cero (0) y su estado en no válido.COleCurrency(
nUnits
,nFractionalUnits
) Construye un objetoCOleCurrency
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 objetoCOleCurrency
es válido.COleCurrency::invalid
Indica que este objetoCOleCurrency
es no válido; es decir, su valor puede que sea incorrecto.COleCurrency::null
Indica que este objetoCOleCurrency
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 objetoCOleCurrency
es válido.COleCurrency::invalid
Indica que este objetoCOleCurrency
es no válido; es decir, su valor puede que sea incorrecto.COleCurrency::null
Indica que este objetoCOleCurrency
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
) ElCURRENCY
valor se copia en elCOleCurrency
objeto y su estado se establece en válido.operator =(
curSrc
) El valor y el estado del operando, un objeto existenteCOleCurrency
se copia en esteCOleCurrency
objeto.operator =( varSrc ) Si la conversión del
VARIANT
valor (o el objeto COleVariant ) a una moneda (VT_CY
) se realiza correctamente, el valor convertido se copia en esteCOleCurrency
objeto y su estado se establece en válido. Si la conversión no se realiza correctamente, el valor del objetoCOleCurrency
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 objetoCOleCurrency
es válido.COleCurrency::invalid
Indica que este objetoCOleCurrency
es no válido; es decir, su valor puede que sea incorrecto.COleCurrency::null
Indica que este objetoCOleCurrency
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.