Classe COleCurrency
Encapsula o tipo de dados CURRENCY
da automação OLE.
Sintaxe
class COleCurrency
Membros
Construtores públicos
Nome | Descrição |
---|---|
COleCurrency::COleCurrency | Constrói um objeto COleCurrency . |
Métodos públicos
Nome | Descrição |
---|---|
COleCurrency::Format | Gera uma representação de cadeia de caracteres formatada de um objeto COleCurrency . |
COleCurrency::GetStatus | Obtém o status (validade) desse objeto COleCurrency . |
COleCurrency::ParseCurrency | Lê um valor CURRENCY de uma cadeia de caracteres e define o valor de COleCurrency . |
COleCurrency::SetCurrency | Define o valor desse objeto COleCurrency . |
COleCurrency::SetStatus | Define o status (validade) desse objeto COleCurrency . |
Operadores públicos
Nome | Descrição |
---|---|
operador = | Copia um valor COleCurrency . |
operator +, - | Adiciona, subtrai e altera o sinal de valores COleCurrency . |
operador +=, -= | Adiciona e subtrai um valor COleCurrency desse objeto COleCurrency . |
operador*/ | Dimensiona um valor COleCurrency por um valor inteiro. |
operador *=, /= | Dimensiona esse valor COleCurrency por um valor inteiro. |
operador << | Gera um valor COleCurrency para CArchive ou CDumpContext . |
operador >> | Insire um objeto COleCurrency de CArchive . |
operator CURRENCY | Converte um COleCurrency valor em uma MOEDA. |
operator ==, <, <=, etc. | Compara dois valores COleCurrency . |
Membros de Dados Públicos
Nome | Descrição |
---|---|
COleCurrency::m_cur | Contém a MOEDA subjacente para este objeto COleCurrency . |
COleCurrency::m_status | Contém o status desse objeto COleCurrency . |
Comentários
COleCurrency
não tem uma classe base.
MOEDA é implementado como um valor inteiro de complemento de 8 bytes dimensionado em 10.000. Isso fornece um número de ponto fixo com 15 dígitos à esquerda do ponto decimal e 4 dígitos à direita. O tipo de dados CURRENCY é extremamente útil para cálculos que envolvem dinheiro ou para qualquer cálculo de ponto fixo em que a precisão é importante. É um dos tipos possíveis para o VARIANT
tipo de dados da automação OLE.
COleCurrency
também implementa algumas operações aritméticas básicas para esse tipo de ponto fixo. Os operadores com suporte foram selecionados para controlar os erros de arredondamento que ocorrem durante cálculos de ponto fixo.
Hierarquia de herança
COleCurrency
Requisitos
Cabeçalho afxdisp.h
COleCurrency::COleCurrency
Constrói um objeto COleCurrency
.
COleCurrency();
COleCurrency(CURRENCY cySrc);
COleCurrency(const COleCurrency& curSrc);
COleCurrency(const VARIANT& varSrc);
COleCurrency(
long nUnits,
long nFractionalUnits);
Parâmetros
cySrc
Um valor CURRENCY a ser copiado no novo objeto COleCurrency
.
curSrc
Um objeto COleCurrency
existente a ser copiado no novo objeto COleCurrency
.
varSrc
Uma estrutura de dados VARIANT
(possivelmente um objeto COleVariant
) a ser convertida em um valor de moeda (VT_CY) e copiada para o novo objeto COleCurrency
.
nUnits, nFractionalUnits Indicam as unidades e a parte fracionária (em 1/10.000) do valor a ser copiado para o novo objeto COleCurrency
.
Comentários
Todos esses construtores criam novos objetos COleCurrency
inicializados para o valor especificado. Uma breve descrição de cada um desses construtores é mostrada abaixo. A menos que observado de outra forma, o status do novo item COleCurrency
é definido como válido.
COleCurrency() Constrói um objeto
COleCurrency
inicializado como 0 (zero).COleCurrency(
cySrc
) Constrói um objetoCOleCurrency
a partir de um valor MOEDA .COleCurrency(
curSrc
) Constrói um objetoCOleCurrency
com base em um objetoCOleCurrency
existente. O novo objeto tem o mesmo status que o objeto de origem.COleCurrency(
varSrc
) Constrói um objetoCOleCurrency
. Tenta converter uma estruturaVARIANT ou um objetoCOleVariant
em um valor de moeda (VT_CY). Se essa conversão tiver êxito, o valor convertido será copiado para o novo objetoCOleCurrency
. Se a conversão não for bem-sucedida, o valor do objetoCOleCurrency
será definido como 0 e seu status será inválido.COleCurrency(
nUnits
,nFractionalUnits
) Constrói um objetoCOleCurrency
dos componentes numéricos especificados. Se o valor absoluto da parte fracionária for maior que 10.000, o ajuste apropriado será feito nas unidades. Observe que as unidades e a parte fracionária são especificadas por valores longos assinados.
Para obter mais informações, confira as entradas CURRENCY e VARIANT no SDK do Windows.
Exemplo
Os exemplos a seguir mostram os efeitos dos construtores de parâmetro zero e de dois 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
Chame essa função de membro para criar uma representação formatada do valor de moeda.
CString Format(DWORD dwFlags = 0, LCID lcid = LANG_USER_DEFAULT) const;
Parâmetros
dwFlags
Indica sinalizadores para configurações de localidade. Somente o seguinte sinalizador é relevante para a moeda:
- LOCALE_NOUSEROVERRIDE Use as configurações de localidade padrão do sistema, em vez de configurações de usuário personalizadas.
lcid
Indica a ID de localidade a ser usada para a conversão.
Valor de retorno
Um CString
que contém o valor de moeda formatado.
Comentários
Ele formata o valor usando as especificações de idioma local (IDs de localidade). Um símbolo de moeda não está incluído no valor retornado. Se o status desse objeto COleCurrency
for nulo, o valor retornado será uma cadeia de caracteres vazia. Se o status for inválido, a cadeia de caracteres de retorno será especificada pelo recurso de cadeia de caracteres IDS_INVALID_CURRENCY.
Exemplo
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
Chame essa função de membro para definir o status (validade) de um dado objeto COleCurrency
.
CurrencyStatus GetStatus() const;
Valor de retorno
Retorna o status desse valor COleCurrency
.
Comentários
O valor retornado é definido pelo tipo enumerado CurrencyStatus
definido dentro da classe COleCurrency
.
enum CurrencyStatus {
valid = 0,
invalid = 1,
null = 2
};
Para obter uma breve descrição desses valores de status, consulte a seguinte lista:
COleCurrency::valid
Indica que esse objetoCOleCurrency
é válido.COleCurrency::invalid
Indica que esse objetoCOleCurrency
é inválido; ou seja, seu valor pode estar incorreto.COleCurrency::null
Indica que esse objetoCOleCurrency
é nulo, ou seja, que nenhum valor foi fornecido para esse objeto. (Isso é "nulo" no sentido de banco de dados de "não ter valor", em vez do NULL do C++.)
O status de um objeto COleCurrency
é inválido nos seguintes casos:
Se seu valor for definido a partir de uma VARIANT ou valor
COleVariant
que não pôde ser convertido em um valor de moeda.Se esse objeto tiver experimentado um estouro ou um estouro negativo durante uma operação de atribuição aritmética, por exemplo
+=
ou *=.Se um valor inválido foi atribuído a esse objeto.
Se o status desse objeto foi explicitamente definido como inválido usando SetStatus.
Para obter mais informações sobre operações que podem definir o status como inválido, confira as seguintes funções de membro:
Exemplo
// 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
A estrutura CURRENCY subjacente para este objeto COleCurrency
.
Comentários
Cuidado
Alterar o valor na estrutura CURRENCY
acessada pelo ponteiro retornado por essa função alterará o valor desse objeto COleCurrency
. Ele não altera o status desse objeto COleCurrency
.
Para obter mais informações, confira a entrada CURRENCY no SDK do Windows.
COleCurrency::m_status
O tipo desse membro de dados é o tipo enumerado CurrencyStatus
, que é definido na classe COleCurrency
.
enum CurrencyStatus{
valid = 0,
invalid = 1,
null = 2,
};
Comentários
Para obter uma breve descrição desses valores de status, consulte a seguinte lista:
COleCurrency::valid
Indica que esse objetoCOleCurrency
é válido.COleCurrency::invalid
Indica que esse objetoCOleCurrency
é inválido; ou seja, seu valor pode estar incorreto.COleCurrency::null
Indica que esse objetoCOleCurrency
é nulo, ou seja, que nenhum valor foi fornecido para esse objeto. (Isso é "nulo" no sentido de banco de dados de "não ter valor", em vez do NULL do C++.)
O status de um objeto COleCurrency
é inválido nos seguintes casos:
Se seu valor for definido a partir de uma VARIANT ou valor
COleVariant
que não pôde ser convertido em um valor de moeda.Se esse objeto tiver experimentado um estouro ou um estouro negativo durante uma operação de atribuição aritmética, por exemplo
+=
ou *=.Se um valor inválido foi atribuído a esse objeto.
Se o status desse objeto foi explicitamente definido como inválido usando SetStatus.
Para obter mais informações sobre operações que podem definir o status como inválido, confira as seguintes funções de membro:
Cuidado
Esse membro de dados é para situações avançadas de programação. Você deve usar as funções de membro embutidas GetStatus e SetStatus. Confira SetStatus
para ver mais precauções sobre como definir explicitamente esse membro de dados.
COleCurrency::operator =
Esses operadores de atribuição sobrecarregados copiam o valor de moeda de origem nesse objeto COleCurrency
.
const COleCurrency& operator=(CURRENCY cySrc);
const COleCurrency& operator=(const COleCurrency& curSrc);
const COleCurrency& operator=(const VARIANT& varSrc);
Comentários
Uma breve descrição de cada operador é mostrada abaixo:
operador =(
cySrc
) OCURRENCY
valor é copiado para oCOleCurrency
objeto e seu status é definido como válido.operador =(
curSrc
) O valor e o status do operando, um objeto existenteCOleCurrency
são copiados para esteCOleCurrency
objeto.operator =( varSrc ) Se a conversão do valor (ou objeto COleVariant) em uma moeda (
VT_CY
) for bem-sucedida, o valor convertido será copiadoVARIANT
para esseCOleCurrency
objeto e seu status será definido como válido. Se a conversão não for bem-sucedida, o valor do objetoCOleCurrency
será definido como 0 e seu status será inválido.
Para obter mais informações, confira as entradas CURRENCY e VARIANT no SDK do Windows.
Exemplo
// 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 +, -
Esses operadores permitem que você adicione e subtraia dois valores COleCurrency
entre si e altere o sinal de um valor COleCurrency
.
COleCurrency operator+(const COleCurrency& cur) const;
COleCurrency operator-(const COleCurrency& cur) const;
COleCurrency operator-() const;
Comentários
Se um dos operandos for nulo, o status do valor resultante COleCurrency
será nulo.
Se a operação aritmética estourar, o valor resultante COleCurrency
será inválido.
Se o operando for inválido e o outro não for nulo, o status do valor resultante COleCurrency
será inválido.
Para obter mais informações sobre os valores de status válido, inválido e nulo, consulte a variável de membro m_status.
Exemplo
// 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 +=, -=
Permitir que você adicione e subtraia um valor COleCurrency
de e para este objeto COleCurrency
.
const COleCurrency& operator+=(const COleCurrency& cur);
const COleCurrency& operator-=(const COleCurrency& cur);
Comentários
Se um dos operandos for nulo, o status desse objeto COleCurrency
será definido como nulo.
Se a operação aritmética estourar, o status desse objeto COleCurrency
será definido como inválido.
Se um dos operandos for inválido e o outro não for nulo, o status desse objeto COleCurrency
será definido como inválido.
Para obter mais informações sobre os valores de status válido, inválido e nulo, consulte a variável de membro m_status.
Exemplo
// 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 /
Permitir que você dimensione um valor COleCurrency
por um valor integral.
COleCurrency operator*(long nOperand) const;
COleCurrency operator/(long nOperand) const;
Comentários
Se o operando COleCurrency
for nulo, o status do valor resultante COleCurrency
será nulo.
Se a operação aritmética estourar ou sofrer um estouro negativo, o status do valor resultante COleCurrency
será inválido.
Se o operando COleCurrency
for inválido, o status do valor resultante COleCurrency
será inválido.
Para obter mais informações sobre os valores de status válido, inválido e nulo, consulte a variável de membro m_status.
Exemplo
// 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 *=, /=
Permitir que você dimensione esse valor COleCurrency
por um valor integral.
const COleCurrency& operator*=(long nOperand);
const COleCurrency& operator/=(long nOperand);
Comentários
Se o operando COleCurrency
for nulo, o status desse objeto COleCurrency
será definido como nulo.
Se a operação aritmética estourar, o status desse objeto COleCurrency
será definido como inválido.
Se o operando COleCurrency
for inválido, o status desse objeto COleCurrency
será definido como inválido.
Para obter mais informações sobre os valores de status válido, inválido e nulo, consulte a variável de membro m_status.
Exemplo
// 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 >>
Dá suporte ao despejo de diagnóstico e ao armazenamento em um arquivo.
friend CDumpContext& operator<<(
CDumpContext& dc,
COleCurrency curSrc);
friend CArchive& operator<<(
CArchive& ar,
COleCurrency curSrc);
friend CArchive& operator>>(
CArchive& ar,
COleCurrency& curSrc);
Comentários
O operador de extração (>>) dá suporte ao carregamento de um arquivo.
COleCurrency::operator CURRENCY
Retorna uma estrutura CURRENCY
cujo valor é copiado desse objeto COleCurrency
.
operator CURRENCY() const;
Comentários
COleCurrency::ParseCurrency
Chame essa função de membro para analisar uma cadeia de caracteres a fim de ler um valor de moeda.
BOOL ParseCurrency(
LPCTSTR lpszCurrency,
DWORD dwFlags = 0,
LCID lcid = LANG_USER_DEFAULT);
throw(CMemoryException*);
throw(COleException*);
Parâmetros
lpszCurrency
Um ponteiro para a cadeia de caracteres terminada em nulo que deve ser analisada.
dwFlags
Indica sinalizadores para configurações de localidade, possivelmente o seguinte sinalizador:
- LOCALE_NOUSEROVERRIDE Use as configurações de localidade padrão do sistema, em vez de configurações de usuário personalizadas.
lcid
Indica a ID de localidade a ser usada para a conversão.
Valor de retorno
Não zero se a cadeia de caracteres tiver sido convertida com êxito em um valor de moeda, caso contrário, 0.
Comentários
Ele usa especificações de idioma local (IDs de localidade) para o significado de caracteres não numéricos na cadeia de caracteres de origem.
Para ver uma discussão sobre valores de ID de localidade, confira Suporte a vários idiomas.
Se a cadeia de caracteres tiver sido convertida com êxito em um valor de moeda, o valor desse objeto COleCurrency
será definido como esse valor e seu status como válido.
Se a cadeia de caracteres não pôde ser convertida em um valor de moeda ou se houve um estouro numérico, o status desse objeto COleCurrency
será inválido.
Se a conversão de cadeia de caracteres falhar devido a erros de alocação de memória, essa função gerará um CMemoryException. Em qualquer outro estado de erro, essa função gera um COleException.
Exemplo
// works if default locale has dot decimal point
COleCurrency cur;
cur.ParseCurrency(_T("$135.95"), 0);
ASSERT(cur == COleCurrency(135, 9500));
Operadores relacionais COleCurrency
Compare dois valores de moeda e retorne não zero se a condição for verdadeira; caso contrário, 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;
Comentários
Observação
O valor retornado das operações de ordenação (<, <=, >, >=) será indefinido se o status de qualquer operando for nulo ou inválido. Os operadores de igualdade (==
, !=
) consideram o status dos operandos.
Exemplo
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
Chame essa função de membro para definir as unidades e a parte fracionária desse objeto COleCurrency
.
void SetCurrency(
long nUnits,
long nFractionalUnits);
Parâmetros
nUnits, nFractionalUnits Indicam as unidades e a parte fracionária (em 1/10.000) do valor a ser copiado para esse objeto COleCurrency
.
Comentários
Se o valor absoluto da parte fracionária for maior que 10.000, o ajuste apropriado será feito nas unidades, conforme mostrado no terceiro dos exemplos a seguir.
Observe que as unidades e a parte fracionária são especificadas por valores longos assinados. O quarto dos exemplos a seguir mostra o que acontece quando os parâmetros têm sinais diferentes.
Exemplo
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
Chame essa função de membro para definir o status (validade) desse objeto COleCurrency
.
void SetStatus(CurrencyStatus status );
Parâmetros
status
O novo status para esse objeto COleCurrency
.
Comentários
O valor do parâmetro status é definido pelo tipo enumerado CurrencyStatus
, que é definido dentro da classe COleCurrency
.
enum CurrencyStatus {
valid = 0,
invalid = 1,
null = 2
};
Para obter uma breve descrição desses valores de status, consulte a seguinte lista:
COleCurrency::valid
Indica que esse objetoCOleCurrency
é válido.COleCurrency::invalid
Indica que esse objetoCOleCurrency
é inválido; ou seja, seu valor pode estar incorreto.COleCurrency::null
Indica que esse objetoCOleCurrency
é nulo, ou seja, que nenhum valor foi fornecido para esse objeto. (Isso é "nulo" no sentido de banco de dados de "não ter valor", em vez do NULL do C++.)
Cuidado
Essa função é para situações de programação avançadas. Essa função não altera os dados nesse objeto. Na maioria das vezes, ela será usada para definir o status como nulo ou inválido. Observe que o operador de atribuição ( operator =) e SetCurrency definem o status para o objeto com base nos valores de origem.