Compartilhar via


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 objeto COleCurrency a partir de um valor MOEDA .

  • COleCurrency(curSrc) Constrói um objeto COleCurrency com base em um objeto COleCurrency existente. O novo objeto tem o mesmo status que o objeto de origem.

  • COleCurrency(varSrc) Constrói um objeto COleCurrency. Tenta converter uma estruturaVARIANT ou um objeto COleVariant em um valor de moeda (VT_CY). Se essa conversão tiver êxito, o valor convertido será copiado para o novo objeto COleCurrency. Se a conversão não for bem-sucedida, o valor do objeto COleCurrency será definido como 0 e seu status será inválido.

  • COleCurrency(nUnits, nFractionalUnits) Constrói um objeto COleCurrency 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 Devolução

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 Devolução

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 objeto COleCurrency é válido.

  • COleCurrency::invalid Indica que esse objeto COleCurrency é inválido; ou seja, seu valor pode estar incorreto.

  • COleCurrency::null Indica que esse objeto COleCurrency é 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 objeto COleCurrency é válido.

  • COleCurrency::invalid Indica que esse objeto COleCurrency é inválido; ou seja, seu valor pode estar incorreto.

  • COleCurrency::null Indica que esse objeto COleCurrency é 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:

  • operator =(cySrc) O valor CURRENCY é copiado para o objeto COleCurrency e seu status é definido como válido.

  • operator =(curSrc) O valor e o status do operando, um objeto existente COleCurrency são copiados para esse objeto COleCurrency.

  • operator =(varSrc) Se a conversão do valor VARIANT (ou o objeto COleVariant) em uma moeda ( VT_CY) for bem-sucedida, o valor convertido será copiado para este objeto COleCurrency e seu status será definido como válido. Se a conversão não for bem-sucedida, o valor do objeto COleCurrency 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 Devolução

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 objeto COleCurrency é válido.

  • COleCurrency::invalid Indica que esse objeto COleCurrency é inválido; ou seja, seu valor pode estar incorreto.

  • COleCurrency::null Indica que esse objeto COleCurrency é 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.

Confira também

Gráfico da hierarquia
Classe COleVariant