Partilhar via


Classe COleCurrency

Encapsula o CURRENCY tipo de dados 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::Formato Gera uma representação formatada de cadeia de caracteres de um COleCurrency objeto.
COleCurrency::GetStatus Obtém o status (validade) deste COleCurrency objeto.
COleCurrency::P arseCurrency Lê um valor CURRENCY de uma cadeia de caracteres e define o valor de COleCurrency.
COleCurrency::SetCurrency Define o valor deste COleCurrency objeto.
COleCurrency::SetStatus Define o status (validade) para este COleCurrency objeto.

Operadores Públicos

Nome Descrição
operador = Copia um COleCurrency valor.
operador +, - Adiciona, subtrai e altera o sinal de COleCurrency valores.
operador +=, -= Adiciona e subtrai um COleCurrency valor deste COleCurrency objeto.
operador */ Dimensiona um COleCurrency valor por um valor inteiro.
operador *=, /= Dimensiona esse COleCurrency valor por um valor inteiro.
Operador << Produz um COleCurrency valor para CArchive ou CDumpContext.
Operador >> Introduz um COleCurrency objeto de CArchive.
operador MOEDA Converte um COleCurrency valor em uma MOEDA.
operador ==, <, <=, etc. Compara dois COleCurrency valores.

Membros de Dados Públicos

Nome Descrição
COleCurrency::m_cur Contém a MOEDA subjacente para este COleCurrency objeto.
COleCurrency::m_status Contém o status deste COleCurrency objeto.

Observações

COleCurrency não tem uma classe base.

CURRENCY é implementado como um valor inteiro de 8 bytes, dois complementos, dimensionado por 10.000. Isto dá um número de ponto fixo com 15 dígitos à esquerda da vírgula decimal e 4 dígitos à direita. O tipo de dados CURRENCY é extremamente útil para cálculos envolvendo dinheiro, ou para qualquer cálculo de ponto fixo onde a precisão é importante. É um dos tipos possíveis para o VARIANT tipo de dados de automação OLE.

COleCurrency também implementa algumas operações aritméticas básicas para este tipo de ponto fixo. As operações suportadas foram selecionadas para controlar os erros de arredondamento que ocorrem durante os cálculos de ponto fixo.

Hierarquia de herança

COleCurrency

Requerimentos

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 para o novo COleCurrency objeto.

curSrc
Um objeto existente COleCurrency a ser copiado para o novo COleCurrency objeto.

varSrc
Uma estrutura de dados existente VARIANT (possivelmente um COleVariant objeto) a ser convertida em um valor de moeda (VT_CY) e copiada para o novo COleCurrency objeto.

nUnits, nFractionalUnits Indicam as unidades e a parte fracionária (em 1/10.000) do valor a ser copiado para o novo COleCurrency objeto.

Observações

Todos esses construtores criam novos COleCurrency objetos inicializados para o valor especificado. Segue-se uma breve descrição de cada um destes construtores. Salvo indicação em contrário, o estado do novo COleCurrency item é definido como válido.

  • COleCurrency() Constrói um COleCurrency objeto inicializado como 0 (zero).

  • COleCurrency(cySrc) Constrói um COleCurrency objeto a partir de um valor CURRENCY .

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

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

  • COleCurrency(nUnits, nFractionalUnits) Constrói um COleCurrency objeto a partir dos componentes numéricos especificados. Se o valor absoluto da fração for superior a 10 000, procede-se ao ajustamento adequado das unidades. Observe que as unidades e a parte fracionária são especificadas por valores longos assinados.

Para obter mais informações, consulte as entradas CURRENCY e VARIANT no SDK do Windows.

Exemplo

Os exemplos a seguir mostram os efeitos dos construtores zero-parameter e two-parameter:

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::Formato

Chame essa função de membro para criar uma representação formatada do valor da moeda.

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

Parâmetros

dwBandeiras
Indica sinalizadores para configurações de localidade. Apenas a seguinte bandeira é 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 o ID de localidade a ser usado para a conversão.

Valor de retorno

A CString que contém o valor da moeda formatada.

Observações

Ele formata o valor usando as especificações do idioma local (IDs de localidade). Um símbolo de moeda não está incluído no valor retornado. Se o status desse COleCurrency objeto for null, o valor de retorno 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 obter o status (validade) de um determinado COleCurrency objeto.

CurrencyStatus GetStatus() const;

Valor de retorno

Devolve o estado deste COleCurrency valor.

Observações

O valor de retorno é definido pelo tipo enumerado CurrencyStatus que é definido dentro da COleCurrency classe.

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

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

  • COleCurrency::null Indica que esse COleCurrency objeto é null, ou seja, que nenhum valor foi fornecido para esse objeto. (Isso é "null" no sentido de banco de dados de "não ter valor", em oposição ao C++ NULL.)

O status de um COleCurrency objeto é inválido nos seguintes casos:

  • Se o seu valor for definido a partir de uma VARIANTE ou COleVariant valor que não pôde ser convertido para um valor de moeda.

  • Se este objeto tiver sofrido um estouro ou subfluxo durante uma operação de atribuição aritmética, por exemplo += ou *=.

  • Se um valor inválido foi atribuído a este objeto.

  • Se o status deste 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, consulte 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 COleCurrency objeto.

Observações

Atenção

Alterar o CURRENCY valor na estrutura acessada pelo ponteiro retornado por esta função alterará o valor deste COleCurrency objeto. Ele não altera o status deste COleCurrency objeto.

Para obter mais informações, consulte a entrada CURRENCY no SDK do Windows.

COleCurrency::m_status

O tipo desse membro de dados é o tipo CurrencyStatusenumerado , que é definido dentro da COleCurrency classe.

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

Observações

Para obter uma breve descrição desses valores de status, consulte a seguinte lista:

  • COleCurrency::valid Indica que este COleCurrency objeto é válido.

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

  • COleCurrency::null Indica que esse COleCurrency objeto é null, ou seja, que nenhum valor foi fornecido para esse objeto. (Isso é "null" no sentido de banco de dados de "não ter valor", em oposição ao C++ NULL.)

O status de um COleCurrency objeto é inválido nos seguintes casos:

  • Se o seu valor for definido a partir de uma VARIANTE ou COleVariant valor que não pôde ser convertido para um valor de moeda.

  • Se este objeto tiver sofrido um estouro ou subfluxo durante uma operação de atribuição aritmética, por exemplo += ou *=.

  • Se um valor inválido foi atribuído a este objeto.

  • Se o status deste 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, consulte as seguintes funções de membro:

Atenção

Este membro de dados é para situações avançadas de programação. Você deve usar as funções de membro embutido GetStatus e SetStatus. Consulte SetStatus para obter mais precauções em relação à configuração explícita desse membro de dados.

COleCurrency::operador =

Esses operadores de atribuição sobrecarregados copiam o valor da moeda de origem para este COleCurrency objeto.

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

Observações

Segue-se uma breve descrição de cada operador:

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

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

  • operador =(varSrc) Se a VARIANT conversão do valor (ou objeto COleVariant ) em uma moeda (VT_CY) for bem-sucedida, o valor convertido será copiado para esse COleCurrency objeto e seu status será definido como válido. Se a conversão não for bem-sucedida, o COleCurrency valor do objeto será definido como 0 e seu status como inválido.

Para obter mais informações, consulte 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::operador +, -

Esses operadores permitem adicionar e subtrair dois COleCurrency valores um para o outro e alterar o sinal de um COleCurrency valor.

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

Observações

Se qualquer um dos operandos for null, o status do valor resultante COleCurrency será null.

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 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::operador +=, -=

Permitir que você adicione e subtraia um COleCurrency valor de e para este COleCurrency objeto.

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

Observações

Se um dos operandos for null, o status deste COleCurrency objeto será definido como null.

Se a operação aritmética estourar, o status deste COleCurrency objeto será definido como inválido.

Se um dos operandos for inválido e o outro não for nulo, o status deste COleCurrency objeto 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 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::operador * e /

Permite dimensionar um COleCurrency valor por um valor integral.

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

Observações

Se o COleCurrency operando for null, o status do valor resultante COleCurrency será null.

Se a operação aritmética estourar ou subfluir, o status do valor resultante COleCurrency será inválido.

Se o COleCurrency operando 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 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::operador *=, /=

Permitir que você dimensione esse COleCurrency valor por um valor integral.

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

Observações

Se o COleCurrency operando for null, o status deste COleCurrency objeto será definido como null.

Se a operação aritmética estourar, o status deste COleCurrency objeto será definido como inválido.

Se o COleCurrency operando for inválido, o status deste COleCurrency objeto 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 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 >>

Suporta despejo de diagnóstico e 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);

Observações

O operador de extração ( >>) suporta o carregamento de um arquivo.

COleCurrency::operador MOEDA

Retorna uma CURRENCY estrutura cujo valor é copiado deste COleCurrency objeto.

operator CURRENCY() const;

Observações

COleCurrency::P arseCurrency

Chame essa função de membro para analisar uma cadeia de caracteres para ler um valor de moeda.

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

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

Parâmetros

lpszMoeda
Um ponteiro para a cadeia de caracteres terminada em nulo que deve ser analisada.

dwBandeiras
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 o ID de localidade a ser usado para a conversão.

Valor de retorno

Diferente de zero se a cadeia de caracteres foi convertida com êxito em um valor de moeda, caso contrário, 0.

Observações

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 obter uma discussão sobre valores de ID de localidade, consulte Suporte a vários idiomas.

Se a cadeia de caracteres foi convertida com êxito em um valor de moeda, o valor desse COleCurrency objeto é definido como esse valor e seu status como válido.

Se a cadeia de caracteres não puder ser convertida em um valor de moeda ou se houver um estouro numérico, o status desse COleCurrency objeto será inválido.

Se a conversão de cadeia de caracteres falhou devido a erros de alocação de memória, esta função lança um CMemoryException. Em qualquer outro estado de erro, essa função lança 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 diferente de 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;

Observações

Observação

O valor de retorno 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 COleCurrency objeto.

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 este COleCurrency objeto.

Observações

Se o valor absoluto da parte fracionária for superior a 10.000, o ajuste adequado é feito nas unidades, como 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 COleCurrency objeto.

void SetStatus(CurrencyStatus  status  );

Parâmetros

Situação
O novo status para este COleCurrency objeto.

Observações

O valor do parâmetro CurrencyStatus é definido pelo tipo enumerado, que é definido dentro da COleCurrency classe.

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

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

  • COleCurrency::null Indica que esse COleCurrency objeto é null, ou seja, que nenhum valor foi fornecido para esse objeto. (Isso é "null" no sentido de banco de dados de "não ter valor", em oposição ao C++ NULL.)

Atenção

Esta função é para situações de programação avançada. Esta função não altera os dados neste objeto. Na maioria das vezes, ele será usado para definir o status como nulo ou inválido. Observe que o operador de atribuição ( operator =) e SetCurrency definem o status do objeto com base no(s) valor(es) de origem.

Ver também

Gráfico de Hierarquia
Classe COleVariant